From df96302c147d778649b7b4dc7bc36f243721e8d1 Mon Sep 17 00:00:00 2001 From: velazquez Date: Wed, 11 Jun 2025 11:28:13 +0200 Subject: [PATCH 01/14] Change copyright headers --- src/network_slice_controller.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/network_slice_controller.py b/src/network_slice_controller.py index 7d14114..1669cbf 100644 --- a/src/network_slice_controller.py +++ b/src/network_slice_controller.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# This file includes original contributions from Telefonica Innovación Digital S.L. + import json, time, os, logging, uuid from datetime import datetime from src.helpers import tfs_connector, cisco_connector -- GitLab From 2ee1bfaa392abac2148241b28a8a96abc74b2315 Mon Sep 17 00:00:00 2001 From: velazquez Date: Wed, 11 Jun 2025 11:49:17 +0200 Subject: [PATCH 02/14] Change copyright headers --- src/helpers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/helpers.py b/src/helpers.py index 47adc16..080238e 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# This file includes original contributions from Telefonica Innovación Digital S.L. + import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL -- GitLab From 1a650c3076c03324bfdfe6754a125f0e1fa8a145 Mon Sep 17 00:00:00 2001 From: rahhal Date: Thu, 26 Jun 2025 09:45:52 +0000 Subject: [PATCH 03/14] Challanege 1 - Use NBI instead of uploading templates to webui --- src/Constants.py | 1 + src/helpers.py | 20 ++- src/network_slice_controller.py | 207 +++++++++++++++++++++----------- 3 files changed, 142 insertions(+), 86 deletions(-) diff --git a/src/Constants.py b/src/Constants.py index f699aed..8916cb3 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -31,5 +31,6 @@ TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") TFS_UPLOAD = False # Teraflow IP TFS_IP = "192.168.165.10" +path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False \ No newline at end of file diff --git a/src/helpers.py b/src/helpers.py index abbac02..700adba 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -28,20 +28,14 @@ class tfs_connector(): user="admin" password="admin" token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://{tfs_ip}/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if("csrf_token" in str(item)): - string=str(item).split(' Date: Thu, 26 Jun 2025 10:05:08 +0000 Subject: [PATCH 04/14] =?UTF-8?q?Challenge=20#3=20=E2=80=93=20L2VPN=20Supp?= =?UTF-8?q?ort=20-=20Change=20L2VPN=20realizer=20to=20use=20IETF=20L2NM=20?= =?UTF-8?q?YANG=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- our-temp/ietf-l3vpn-service.json | 83 ++++++++++++ src/Constants.py | 9 +- src/helpers.py | 47 ++++--- src/network_slice_controller.py | 209 ++++++++++++++++++++----------- src/templates/l2vpn_request.json | 34 +++++ 5 files changed, 289 insertions(+), 93 deletions(-) create mode 100644 our-temp/ietf-l3vpn-service.json create mode 100644 src/templates/l2vpn_request.json diff --git a/our-temp/ietf-l3vpn-service.json b/our-temp/ietf-l3vpn-service.json new file mode 100644 index 0000000..9eb70db --- /dev/null +++ b/our-temp/ietf-l3vpn-service.json @@ -0,0 +1,83 @@ +{ + "ietf-l3vpn-svc:l3vpn-svc": { + "vpn-services": {"vpn-service": [{"vpn-id": "ietf-l3vpn-svc"}]}, + "sites": { + "site": [ + { + "site-id": "site_DC1", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC1"}]}, + "devices": {"device": [{"device-id": "dc1", "location": "DC1"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "eth1", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "dc1", + "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.1.1", + "customer-address": "192.168.1.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 10}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + }, + { + "site-id": "site_DC2", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC2"}]}, + "devices": {"device": [{"device-id": "dc2", "location": "DC2"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "eth1", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "dc2", + "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.2.1", + "customer-address": "192.168.2.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 10}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + } + ] + } + } +} diff --git a/src/Constants.py b/src/Constants.py index 337be88..d5e54f7 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This file is an original contribution from Telefonica Innovación Digital S.L. - import logging, os # Default logging level DEFAULT_LOGGING_LEVEL = logging.INFO @@ -33,5 +31,10 @@ TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") TFS_UPLOAD = False # Teraflow IP TFS_IP = "192.168.165.10" +path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" +#path_l3 = "restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" + +#json_file = "/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json" +#/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False \ No newline at end of file diff --git a/src/helpers.py b/src/helpers.py index 47adc16..4fcf2bb 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL +from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -23,25 +24,39 @@ logging.basicConfig( #Teraflow class tfs_connector(): - - def simple_post(self, tfs_ip, service): + #curl -X POST -H "Content-Type: application/json" --user "admin:admin" --data @ietf-l3vpn-service.json http://10.1.7.197/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services + + def simple_post(self, tfs_ip,service,path): user="admin" password="admin" token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://{tfs_ip}/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if("csrf_token" in str(item)): - string=str(item).split(' Date: Thu, 26 Jun 2025 13:20:09 +0000 Subject: [PATCH 05/14] =?UTF-8?q?Challenge=20#4=20=E2=80=93L3VPN=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Constants.py | 9 +- src/helpers.py | 47 ++++--- src/network_slice_controller.py | 209 +++++++++++++++++++++----------- 3 files changed, 172 insertions(+), 93 deletions(-) diff --git a/src/Constants.py b/src/Constants.py index 337be88..c2e29ad 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This file is an original contribution from Telefonica Innovación Digital S.L. - import logging, os # Default logging level DEFAULT_LOGGING_LEVEL = logging.INFO @@ -33,5 +31,10 @@ TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") TFS_UPLOAD = False # Teraflow IP TFS_IP = "192.168.165.10" +#path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" +path_l3 = "restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" + +#json_file = "/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json" +#/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False \ No newline at end of file diff --git a/src/helpers.py b/src/helpers.py index 47adc16..63918aa 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL +from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -23,25 +24,39 @@ logging.basicConfig( #Teraflow class tfs_connector(): - - def simple_post(self, tfs_ip, service): + #curl -X POST -H "Content-Type: application/json" --user "admin:admin" --data @ietf-l3vpn-service.json http://10.1.7.197/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services + + def simple_post(self, tfs_ip,service,path): user="admin" password="admin" token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://{tfs_ip}/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if("csrf_token" in str(item)): - string=str(item).split(' Date: Mon, 28 Jul 2025 13:17:08 +0200 Subject: [PATCH 06/14] Added webui --- app.py | 16 +- src/Constants.py | 21 +- src/IPs.json | 4 + src/network_slice_controller.py | 312 +++++++++--- src/realizers/ixia/NEII_V4.py | 362 ++++++++++++++ src/realizers/ixia/automatizacion_ne2v4.py | 454 +++++++++++++++++ src/templates/L2-VPN_template_empty.json | 2 - src/templates/L2-VPN_template_example.json | 354 ++++---------- src/templates/L3-VPN_template_empty.json | 2 - src/templates/L3-VPN_template_example.json | 176 ++++--- src/templates/ietf_template_empty.json | 10 - src/templates/ietf_template_example.json | 283 ++++++----- src/templates/test_service.json | 93 ---- src/webui/gui.py | 462 ++++++++++++++++++ src/webui/static/img/MiniLogo.png | Bin 0 -> 42223 bytes src/webui/static/img/TelefonicaLogo.png | Bin 0 -> 48620 bytes src/webui/static/img/banner.png | Bin 0 -> 59292 bytes src/webui/templates/dev.html | 459 +++++++++++++++++ src/webui/templates/index.html | 219 +++++++++ src/webui/templates/ixia.html | 249 ++++++++++ src/webui/templates/login.html | 192 ++++++++ src/webui/templates/search.html | 189 +++++++ src/webui/templates/welcome.html | 174 +++++++ swagger/ixia_namespace.py | 112 +++++ .../{slice_namespace.py => tfs_namespace.py} | 84 ++-- 25 files changed, 3498 insertions(+), 731 deletions(-) create mode 100644 src/IPs.json create mode 100644 src/realizers/ixia/NEII_V4.py create mode 100644 src/realizers/ixia/automatizacion_ne2v4.py delete mode 100644 src/templates/test_service.json create mode 100644 src/webui/gui.py create mode 100644 src/webui/static/img/MiniLogo.png create mode 100644 src/webui/static/img/TelefonicaLogo.png create mode 100644 src/webui/static/img/banner.png create mode 100644 src/webui/templates/dev.html create mode 100644 src/webui/templates/index.html create mode 100644 src/webui/templates/ixia.html create mode 100644 src/webui/templates/login.html create mode 100644 src/webui/templates/search.html create mode 100644 src/webui/templates/welcome.html create mode 100644 swagger/ixia_namespace.py rename swagger/{slice_namespace.py => tfs_namespace.py} (52%) diff --git a/app.py b/app.py index 1e34ec5..61503b3 100644 --- a/app.py +++ b/app.py @@ -14,11 +14,14 @@ # This file is an original contribution from Telefonica Innovación Digital S.L. +import os from flask import Flask from flask_restx import Api from flask_cors import CORS -from swagger.slice_namespace import slice_ns -from src.Constants import NSC_PORT +from swagger.tfs_namespace import tfs_ns +from swagger.ixia_namespace import ixia_ns +from src.Constants import NSC_PORT, WEBUI_DEPLOY +from src.webui.gui import gui_bp app = Flask(__name__) CORS(app) @@ -33,7 +36,14 @@ api = Api( ) # Register namespaces -api.add_namespace(slice_ns, path="/slice") +api.add_namespace(tfs_ns, path="/tfs") +api.add_namespace(ixia_ns, path="/ixia") +#gui_bp = Blueprint('gui', __name__, template_folder='templates') + +if WEBUI_DEPLOY: + app.secret_key = 'clave-secreta-dev' + app.register_blueprint(gui_bp) + if __name__ == "__main__": app.run(host="0.0.0.0", port=NSC_PORT, debug=True) diff --git a/src/Constants.py b/src/Constants.py index 337be88..c88b5b9 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -14,7 +14,8 @@ # This file is an original contribution from Telefonica Innovación Digital S.L. -import logging, os +import logging, os, json + # Default logging level DEFAULT_LOGGING_LEVEL = logging.INFO @@ -24,14 +25,22 @@ NSC_PORT = 8081 # Paths # Obtain the absolute path of the current file SRC_PATH = os.path.dirname(os.path.abspath(__file__)) +with open(os.path.join(SRC_PATH, 'IPs.json')) as f: + ips = json.load(f) # Create the path to the desired file relative to the current file TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") -# TFS Flags -# Flag to determine if configurations should be uploaded to Teraflow -TFS_UPLOAD = False +# Controller Flags +# If True, config is not sent to controllers +DUMMY_MODE = True # Teraflow IP -TFS_IP = "192.168.165.10" +TFS_IP = ips.get('TFS_IP') # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection -TFS_L2VPN_SUPPORT = False \ No newline at end of file +TFS_L2VPN_SUPPORT = False +# IXIA NEII IP +IXIA_IP = ips.get('IXIA_IP') + +# WebUI +# Flag to deploy the WebUI +WEBUI_DEPLOY = True \ No newline at end of file diff --git a/src/IPs.json b/src/IPs.json new file mode 100644 index 0000000..e56bdb0 --- /dev/null +++ b/src/IPs.json @@ -0,0 +1,4 @@ +{ + "TFS_IP": "192.168.27.165", + "IXIA_IP": "192.168.27.59" +} \ No newline at end of file diff --git a/src/network_slice_controller.py b/src/network_slice_controller.py index 1669cbf..d280ebb 100644 --- a/src/network_slice_controller.py +++ b/src/network_slice_controller.py @@ -14,10 +14,11 @@ # This file includes original contributions from Telefonica Innovación Digital S.L. -import json, time, os, logging, uuid +import json, time, os, logging, uuid, traceback, sys from datetime import datetime from src.helpers import tfs_connector, cisco_connector -from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_UPLOAD, TFS_IP, TFS_L2VPN_SUPPORT, SRC_PATH, TEMPLATES_PATH +from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_IP, TFS_L2VPN_SUPPORT, IXIA_IP, SRC_PATH, TEMPLATES_PATH, DUMMY_MODE +from src.realizers.ixia.NEII_V4 import NEII_controller # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -40,25 +41,24 @@ class NSController: - Slice Realization: Convert intents to specific network configurations (L2VPN, L3VPN) """ - def __init__(self, upload_to_tfs = TFS_UPLOAD, tfs_ip=TFS_IP, need_l2vpn_support=TFS_L2VPN_SUPPORT): + def __init__(self, controller_type = "TFS", tfs_ip=TFS_IP, ixia_ip =IXIA_IP, need_l2vpn_support=TFS_L2VPN_SUPPORT): """ Initialize the Network Slice Controller. Args: - upload_to_tfs (bool, optional): Flag to determine if configurations - should be uploaded to Teraflow system. Defaults to False. + controller_type (str): Flag to determine if configurations + should be uploaded to Teraflow or IXIA system. need_l2vpn_support (bool, optional): Flag to determine if additional L2VPN configuration support is required. Defaults to False. Attributes: - upload_to_tfs (bool): Flag for Teraflow upload + controller_type (str): Flag for Teraflow or Ixia upload answer (dict): Stores slice creation responses - tfs_requests (dict): Stores requests to be sent to Teraflow start_time (float): Tracks slice setup start time end_time (float): Tracks slice setup end time need_l2vpn_support (bool): Flag for additional L2VPN configuration support """ - self.upload_to_tfs = upload_to_tfs + self.controller_type = controller_type self.tfs_ip = tfs_ip self.answer = {} self.cool_answer = {} @@ -132,7 +132,7 @@ class NSController: raise ValueError("Transport network slices not found") # Return all slices if no specific ID is given - return content + return [slice for slice in content if slice.get("controller") == self.controller_type] except ValueError as e: # Handle case where no slices are found @@ -181,7 +181,7 @@ class NSController: Exception: For unexpected errors during deletion process Notes: - - If upload_to_tfs is True, attempts to delete from Teraflow + - If controller_type is TFS, attempts to delete from Teraflow - If need_l2vpn_support is True, performs additional L2VPN cleanup """ try: @@ -193,7 +193,7 @@ class NSController: # Delete specific slice if slice_id is provided if slice_id: for i, slice in enumerate(content): - if slice["slice_id"] == slice_id: + if slice["slice_id"] == slice_id and slice.get("controller") == self.controller_type: del content[i] id = i break @@ -209,19 +209,21 @@ class NSController: # Delete all slices else: # Optional: Delete in Teraflow if configured - if self.upload_to_tfs == True: + if self.controller_type == "TFS": # TODO: should send a delete request to Teraflow if self.need_l2vpn_support: self.__tfs_l2vpn_delete() + data_removed = [slice for slice in content if slice.get("controller") == self.controller_type] + # Verify slices exist before deletion - with open(os.path.join(SRC_PATH, "slice_ddbb.json"), 'r') as file: - if len(json.load(file)) == 0: - raise ValueError("Transport network slices not found") - + if len(data_removed) == 0: + raise ValueError("Transport network slices not found") + + filtered_data = [slice for slice in content if slice.get("controller") != self.controller_type] # Clear slice database with open(os.path.join(SRC_PATH, "slice_ddbb.json"), 'w') as file: - json.dump([], file, indent=4) + json.dump(filtered_data, file, indent=4) logging.info("All slices removed successfully") return self.__send_response(False, code=200, status="success", message="All transport network slices deleted successfully.") @@ -259,7 +261,7 @@ class NSController: # Reset requests and load IETF template self.__load_template(1, os.path.join(TEMPLATES_PATH, "ietf_template_empty.json")) - tfs_requests = {"services":[]} + requests = {"services":[]} # Process intent (translate if 3GPP) ietf_intents = self.__nbi_processor(intent_json) @@ -273,25 +275,32 @@ class NSController: self.__mapper(intent) # Realizer tfs_request = self.__realizer(intent) - tfs_requests["services"].append(tfs_request) + requests["services"].append(tfs_request) else: return self.__send_response(False, code=404, message="No intents found") # Generated service - logging.debug(json.dumps(tfs_requests, indent=2)) + logging.debug(json.dumps(requests, indent=2)) # Optional: Upload template to Teraflow - if self.upload_to_tfs == True: - response = tfs_connector().simple_post(self.tfs_ip, tfs_requests) + if not DUMMY_MODE: + if self.controller_type == "TFS": + response = tfs_connector().simple_post(self.tfs_ip, requests) - if not response.ok: - return self.__send_response(False, code=response.status_code, message=f"Teraflow upload failed. Response: {response.text}") - - # For deploying an L2VPN with path selection (not supported by Teraflow) - if self.need_l2vpn_support: - self.__tfs_l2vpn_support(tfs_requests["services"]) + if not response.ok: + return self.__send_response(False, code=response.status_code, message=f"Teraflow upload failed. Response: {response.text}") + + # For deploying an L2VPN with path selection (not supported by Teraflow) + if self.need_l2vpn_support: + self.__tfs_l2vpn_support(requests["services"]) - logging.info("Request sent to Teraflow") + logging.info("Request sent to Teraflow") + elif self.controller_type == "IXIA": + neii_controller = NEII_controller() + for intent in requests["services"]: + # Send each separate IXIA request + neii_controller.nscNEII(intent) + logging.info("Requests sent to Ixia") # End performance tracking self.end_time = time.perf_counter() @@ -321,7 +330,7 @@ class NSController: # Detect the input JSON format (3GPP or IETF) format = self.__detect_format(intent_json) ietf_intents = [] - logging.info("--------NEW REQUEST--------") + logging.debug("--------NEW REQUEST--------") # TODO Needs to be generalized to support different names of slicesubnets # Process different input formats @@ -334,6 +343,8 @@ class NSController: # If already in IETF format, add directly logging.info(f"IETF intent received") ietf_intents.append(intent_json) + with open(os.path.join(TEMPLATES_PATH, "ietf_template_example.json"), "w") as archivo: + archivo.write(json.dumps(ietf_intents,indent=2)) else: # Handle unrecognized format logging.error(f"JSON request format not recognized") @@ -364,29 +375,30 @@ class NSController: # Extract Service Level Objectives (SLOs) from the intent slos = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"] - # Find candidate NRPs that can meet the SLO requirements - candidates = [ - (nrp, self.__slo_viability(slos, nrp)[1]) - for nrp in self.__nrp_view - if self.__slo_viability(slos, nrp)[0] and nrp["available"] - ] - logging.debug(f"Candidates: {candidates}") - - # Select the best NRP based on candidates - best_nrp = max(candidates, key=lambda x: x[1])[0] if candidates else None - logging.debug(f"Best NRP: {best_nrp}") - - if best_nrp: - best_nrp["slices"].append(ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"]) - # Update NRP view - self.__realizer(ietf_intent, True, "UPDATE") - # TODO Here we should put how the slice is attached to an already created nrp - else: - # Request the controller to create a new NRP that meets the SLOs - answer = self.__realizer(ietf_intent, True, "CREATE", best_nrp) - if not answer: - raise Exception("Slice rejected due to lack of NRPs") - # TODO Here we should put how the slice is attached to the new nrp + if slos: + # Find candidate NRPs that can meet the SLO requirements + candidates = [ + (nrp, self.__slo_viability(slos, nrp)[1]) + for nrp in self.__nrp_view + if self.__slo_viability(slos, nrp)[0] and nrp["available"] + ] + logging.debug(f"Candidates: {candidates}") + + # Select the best NRP based on candidates + best_nrp = max(candidates, key=lambda x: x[1])[0] if candidates else None + logging.debug(f"Best NRP: {best_nrp}") + + if best_nrp: + best_nrp["slices"].append(ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"]) + # Update NRP view + self.__realizer(ietf_intent, True, "UPDATE") + # TODO Here we should put how the slice is attached to an already created nrp + else: + # Request the controller to create a new NRP that meets the SLOs + answer = self.__realizer(ietf_intent, True, "CREATE", best_nrp) + if not answer: + raise Exception("Slice rejected due to lack of NRPs") + # TODO Here we should put how the slice is attached to the new nrp def __realizer(self, ietf_intent, need_nrp=False, order=None, nrp=None): """ @@ -407,7 +419,8 @@ class NSController: self.__nrp(order, nrp) else: # Select slice service method - return self.__select_way("L2VPN", ietf_intent) + way = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["service-tags"]["tag-type"]["value"] + return self.__select_way(controller=self.controller_type, way=way, ietf_intent=ietf_intent) ### Generic functionalities def __load_template(self, which, dir_t): @@ -463,14 +476,14 @@ class NSController: "setup_time": self.setup_time } # Add slice details to the response + logging.info(self.answer) for subnet in self.answer: slice_info = { "id": subnet, "source": self.answer[subnet]["Source"], "destination": self.answer[subnet]["Destination"], "vlan": self.answer[subnet]["VLAN"], - "bandwidth(Mbps)": self.answer[subnet]["QoS Requirements"][0], - "latency(ms)": self.answer[subnet]["QoS Requirements"][1] + "requirements": self.answer[subnet]["QoS Requirements"], } answer["slices"].append(slice_info) self.cool_answer = answer @@ -539,7 +552,8 @@ class NSController: content.append( { "slice_id": intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"], - "intent": intent + "intent": intent, + "controller": self.controller_type, }) # # Write updated content back to file @@ -599,8 +613,38 @@ class NSController: # Populate template with SLOs (currently supporting QoS profile, latency and bandwidth) ietf_i["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"] = gpp_intent[ep_transport_objects[0]]["qosProfile"] - ietf_i["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][0]["bound"] = gpp_intent[subnet]["SliceProfileList"][0]["RANSliceSubnetProfile"]["uLThptPerSliceSubnet"]["MaxThpt"] - ietf_i["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][1]["bound"] = gpp_intent[subnet]["SliceProfileList"][0]["RANSliceSubnetProfile"]["uLLatency"] + + profile = gpp_intent.get(subnet, {}).get("SliceProfileList", [{}])[0].get("RANSliceSubnetProfile", {}) + + + metrics = { + ("uLThptPerSliceSubnet", "MaxThpt"): ("throughput", "kbps"), + ("uLLatency",): ("latency", "ms"), + ("EnergyConsumption",): ("energy_consumption", "Joules"), + ("EnergyEfficiency",): ("energy_efficiency", "W/bps"), + ("CarbonEmissions",): ("carbon_emission", "gCO2eq"), + ("RenewableEnergyUsage",): ("renewable_energy_usage", "rate") + } + + # Aux + def get_nested(d, keys): + for k in keys: + if isinstance(d, dict) and k in d: + d = d[k] + else: + return None + return d + + for key_path, (metric_type, metric_unit) in metrics.items(): + value = get_nested(profile, key_path) + if value is not None: + ietf_i["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]\ + ["slo-sle-template"][0]["slo-policy"]["metric-bound"].append({ + "metric-type": metric_type, + "metric-unit": metric_unit, + "bound": value + }) + # Generate unique slice service ID and description ietf_i["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"] = f"slice-service-{uuid.uuid4()}" @@ -828,11 +872,15 @@ class NSController: logging.debug("Updating NRP") answer = "" - def __select_way(self,way, ietf_intent): + def __select_way(self, controller=None, way=None, ietf_intent=None): """ Determine the method of slice realization. Args: + controller (str): The controller to use for slice realization. + Supported values: + - "IXIA": IXIA NEII for network testing + - "TFS": TeraFlow Service for network slice management way (str): The type of technology to use. Supported values: - "L2VPN": Layer 2 Virtual Private Network @@ -844,10 +892,20 @@ class NSController: dict: A realization request for the specified network slice type. """ - if way == "L2VPN": + realizing_request = None + if controller == "TFS": + if way == "L2VPN": + realizing_request = self.__tfs_l2vpn(ietf_intent) + elif way == "L3VPN": + realizing_request = self.__tfs_l3vpn(ietf_intent) + else: + logging.warning(f"Unsupported way: {way}. Defaulting to L2VPN realization.") + realizing_request = self.__tfs_l2vpn(ietf_intent) + elif controller == "IXIA": + realizing_request = self.__ixia(ietf_intent) + else: + logging.warning(f"Unsupported controller: {controller}. Defaulting to TFS L2VPN realization.") realizing_request = self.__tfs_l2vpn(ietf_intent) - elif way == "L3VPN": - realizing_request = self.__tfs_l3vpn(ietf_intent) return realizing_request def __tfs_l2vpn(self, ietf_intent): @@ -874,7 +932,7 @@ class NSController: origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] origin_router_if = '0/0/0-GigabitEthernet0/0/0/0' destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] - destination_router_if = '0/0/3-GigabitEthernet0/0/0/3' + destination_router_if = '0/0/0-GigabitEthernet0/0/0/0' # Extract QoS Profile from intent QoSProfile = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"] @@ -895,10 +953,18 @@ class NSController: self.answer[self.subnet]["QoS Requirements"] = [] # Add service constraints - for i, constraint in enumerate(tfs_request["service_constraints"]): + for i, constraint in enumerate(ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"]): bound = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["bound"] - self.answer[self.subnet]["QoS Requirements"].append(bound) - constraint["custom"]["constraint_value"] = str(bound) + metric_type = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-type"] + metric_unit = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-unit"] + service_constraint ={ + "custom": { + "constraint_type": f"{metric_type}[{metric_unit}]", + "constraint_value": f"{bound}" + } + } + self.answer[self.subnet]["QoS Requirements"].append(service_constraint["custom"]) + tfs_request["service_constraints"].append(service_constraint) # Add configuration rules for i, config_rule in enumerate(tfs_request["service_config"]["config_rules"][1:], start=1): @@ -908,14 +974,15 @@ class NSController: sdp_index = i - 1 vlan_value = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][sdp_index]["service-match-criteria"]["match-criterion"][0]["value"] - resource_value["vlan_id"] = int(vlan_value) + if vlan_value: + resource_value["vlan_id"] = int(vlan_value) resource_value["circuit_id"] = vlan_value resource_value["remote_router"] = destination_router_id if i == 1 else origin_router_id resource_value["ni_name"] = 'ELAN{:s}'.format(str(vlan_value)) config_rule["custom"]["resource_key"] = f"/device[{router_id}]/endpoint[{router_if}]/settings" # Log and store VLAN information - logging.info(f"Intent with VLAN {vlan_value} realized\n") + logging.info(f"L2VPN Intent realized\n") self.answer[self.subnet]["VLAN"] = vlan_value return tfs_request @@ -1012,7 +1079,7 @@ class NSController: origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] origin_router_if = '0/0/0-GigabitEthernet0/0/0/0' destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] - destination_router_if = '0/0/3-GigabitEthernet0/0/0/3' + destination_router_if = '0/0/0-GigabitEthernet0/0/0/0' # Load L3VPN service template self.__load_template(2, os.path.join(TEMPLATES_PATH, "L3-VPN_template_empty.json")) @@ -1026,10 +1093,20 @@ class NSController: endpoint["device_id"]["device_uuid"]["uuid"] = origin_router_id if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_id endpoint["endpoint_uuid"]["uuid"] = origin_router_if if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_if + self.answer[self.subnet]["QoS Requirements"] = [] # Add service constraints - for i, constraint in enumerate(tfs_request["service_constraints"]): + for i, constraint in enumerate(ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"]): bound = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["bound"] - constraint["custom"]["constraint_value"] = str(bound) + metric_type = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-type"] + metric_unit = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-unit"] + service_constraint ={ + "custom": { + "constraint_type": f"{metric_type}[{metric_unit}]", + "constraint_value": f"{bound}" + } + } + self.answer[self.subnet]["QoS Requirements"].append(service_constraint["custom"]) + tfs_request["service_constraints"].append(service_constraint) # Add configuration rules for i, config_rule in enumerate(tfs_request["service_config"]["config_rules"][1:], start=1): @@ -1047,11 +1124,100 @@ class NSController: resource_value["ni_name"] = 'ELAN{:s}'.format(str(vlan_value)) config_rule["custom"]["resource_key"] = f"/device[{router_id}]/endpoint[{router_if}]/settings" + logging.info(f"L3VPN Intent realized\n") + self.answer[self.subnet]["VLAN"] = vlan_value + with open(os.path.join(TEMPLATES_PATH, "L3-VPN_template_example.json"), "w") as archivo: + archivo.write(json.dumps(tfs_request,indent=2)) return tfs_request + def __ixia(self, ietf_intent): + """ + Prepare an Ixia service request based on the IETF intent. + This method configures an Ixia service request by: + 1. Defining endpoint routers + 2. Loading a service template + 3. Generating a unique service UUID + 4. Configuring service endpoints + 5. Adding QoS constraints + Args: + ietf_intent (dict): IETF-formatted network slice intent. + Returns: + dict: An Ixia service request for configuration. + """ + self.answer[self.subnet]["QoS Requirements"] = [] + # Add service constraints + for i, constraint in enumerate(ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"]): + bound = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["bound"] + metric_type = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-type"] + metric_unit = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-unit"] + service_constraint ={ + "custom": { + "constraint_type": f"{metric_type}[{metric_unit}]", + "constraint_value": f"{bound}" + } + } + self.answer[self.subnet]["QoS Requirements"].append(service_constraint["custom"]) + self.answer[self.subnet]["VLAN"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["value"] + # Extraer la lista de métricas de forma segura + metric_bounds = ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) \ + .get("slo-sle-templates", {}) \ + .get("slo-sle-template", [{}])[0] \ + .get("slo-policy", {}) \ + .get("metric-bound", []) + + # Inicializar valores + bandwidth = None + latency = None + tolerance = None + + # Asignar valores según el tipo de métrica + for metric in metric_bounds: + metric_type = metric.get("metric-type") + bound = metric.get("bound") + + if metric_type == "one-way-bandwidth": + bandwidth = bound + elif metric_type == "one-way-delay-maximum": + latency = bound + elif metric_type == "one-way-delay-variation-maximum": + tolerance = bound + + # Construcción del diccionario intent + intent = { + "src_node_ip": ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) + .get("slice-service", [{}])[0] + .get("sdps", {}).get("sdp", [{}])[0] + .get("attachment-circuits", {}).get("attachment-circuit", [{}])[0] + .get("sdp-peering", {}).get("peer-sap-id"), + + "dst_node_ip": ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) + .get("slice-service", [{}])[0] + .get("sdps", {}).get("sdp", [{}, {}])[1] + .get("attachment-circuits", {}).get("attachment-circuit", [{}])[0] + .get("sdp-peering", {}).get("peer-sap-id"), + + "vlan_id": ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) + .get("slice-service", [{}])[0] + .get("sdps", {}).get("sdp", [{}])[0] + .get("service-match-criteria", {}).get("match-criterion", [{}])[0] + .get("value"), + + "bandwidth": bandwidth, + "latency": latency, + "tolerance": tolerance, + + "latency_version": ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) + .get("slo-sle-templates", {}).get("slo-sle-template", [{}])[0] + .get("description"), + + "reliability": ietf_intent.get("ietf-network-slice-service:network-slice-services", {}) + .get("slo-sle-templates", {}).get("slo-sle-template", [{}])[0] + .get("sle-policy", {}).get("reliability"), + } - + logging.info(f"IXIA Intent realized\n") + return intent diff --git a/src/realizers/ixia/NEII_V4.py b/src/realizers/ixia/NEII_V4.py new file mode 100644 index 0000000..64a1331 --- /dev/null +++ b/src/realizers/ixia/NEII_V4.py @@ -0,0 +1,362 @@ +###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. +###SPDX-License-Identifier: AGPL-3.0-or-later + +from .automatizacion_ne2v4 import automatizacion +import ipaddress, logging +from src.Constants import IXIA_IP + +class NEII_controller: + def __init__(self, ixia_ip=IXIA_IP): + self.ixia_ip = ixia_ip + + def menu_principal(self, ip=IXIA_IP): + ''' + Inputs: + Outputs: + Work: The main menu of the application. + Notes: If the file is executed from the terminal, ensure that the import + of "automatizacion_ne2v4" does not include a dot at the beggining. + ''' + ip=input("¿Cuál es la IP del network emulator?: ") + accion=input("¿Qué deseas hacer?: \n(1) Ver información de IP\n(2) Consultar información del Hardware\n(3) Configurar un perfil nuevo\n(4) Consultar perfiles existentes\nSelecciona una opción: ") + if accion=="1": + self.ver_info(ip) + if accion=="2": + self.hardware(ip) + if accion=="3": + self.nuevo_perfil(ip) + if accion=="4": + self.existentes(ip) + return + + ## FUNCIONES MENÚ PRINCIPAL ## + + def ver_info(self,ip): + ''' + Inputs: -ip: the ip where the Axia API is located. + Outputs: + Work: It gives the information of the API. + + ''' + informacion_ip=automatizacion.obtener_informacion_ip(ip) + if informacion_ip: + print(informacion_ip) + + def hardware(self,ip): + ''' + Inputs: -ip: the ip where the Axia API is located. + Outputs: + Work: It gives the information of the hardware. + + ''' + informacion_hardware=automatizacion.obtener_informacion_hardware(ip) + if informacion_hardware: + print(informacion_hardware) + + def nuevo_perfil(self,ip): + ''' + Inputs: -ip: the ip where the Axia API is located. + Outputs: + Work: Creates and configures the profiles requested in the Axia API on the specified port. + Notes: It is NOT required to fill all the information requested. + + ''' + puerto=input("¿Qué puerto quieres configurar?: ") + num_perfiles=int(input("¿Cuantos perfiles quieres añadir?: ")) + configuraciones_totales=[] + for i in range(num_perfiles): + nombre=f"perfil{i+1}" + accion=input("¿Qué deseas configurar?\n1)IPv4\t2)IPv6\n3)VLAN\t4)Delay\n5)Packet Drop\t6)Policer (Rx Bandwidth)\n7)Shaper (Rx Bandwidth)\nPor favor, separa las opciones con comas: ") + opciones=accion.split(',') + configuraciones={} + for opcion in opciones: + opcion=opcion.strip() + if opcion=="1": + source_ip=input("Introduce la IP de origen (IPv4): ") + destination_ip=input("Introduce la IP destino (IPv4): ") + prt=input("¿Qué protocolo quieres usar, IP o TCP? ") + configuraciones['ipv4']=self.ipv4(source_ip,destination_ip,prt) + elif opcion=="2": + source=input("Introduce la IP de origen (IPv6): ") + destination=input("Introduce la IP destino (IPv6): ") + configuraciones['ipv6']=self.ipv6(source, destination) + elif opcion=="3": + vlan_id=int(input("Introduce identificador de VLAN: ")) + configuraciones['vlan']=self.vlan(vlan_id) + elif opcion=="4": + delay_perfil=input("Introduce el delay que quieres introducir en el perfil test_api: ") + configuraciones['ethernetDelay']=self.delay(delay_perfil) + elif opcion=="5": + configuraciones['packetDrop']=self.packetDrop() + elif opcion=="6": + bandwidth=int(input('Introduzca el ancho de banda (Kbps): ')) + configuraciones['policer']=self.policer(bandwidth) + elif opcion=="7": + configuraciones['shaper']=self.shaper() + else: + print(f"Opción '{opcion}' no es válida.") + configuracion_perfil=self.configuracion_total(configuraciones, nombre) + configuraciones_totales.append(configuracion_perfil) + perfil_final = {'profiles': configuraciones_totales} + configuracion_puerto=automatizacion.envio_peticion(ip, puerto, perfil_final) + if configuracion_puerto: + print(configuracion_puerto) + + def existentes(self,ip): + ''' + Inputs: -ip: the ip where the Axia API is located. + Outputs: + Work: Shows the information of a given port- + + ''' + puerto=input("¿Qué puerto quieres consultar?: ") + informacion_puerto=automatizacion.obtener_informacion_puerto(ip, puerto) + if informacion_puerto: + print(informacion_puerto) + + def existentes_auto(self,ip,puerto): + ''' + Inputs: -ip: the ip where the Axia API is located. + - puerto: the port we want to get the information. + Outputs: + Work: Creates and configures the profiles requested in the Axia API on the specified port. + + ''' + informacion_puerto=automatizacion.obtener_informacion_puerto(ip, puerto) + if informacion_puerto: + print(f'info puerto\n{informacion_puerto}') + return informacion_puerto + + ## FUNCION PARA LA GUI DEL NSC ## + + import ipaddress + + def nscNEII(self, json_data): + configuraciones = {} + ip = self.ixia_ip + puerto = "5" + dataProfile = self.existentes_auto(ip, puerto) + + print(f'\n\n{json_data}\n') + + ip_version = json_data.get("ip_version", None) + src_node_ip = json_data.get("src_node_ip", None) + dst_node_ip = json_data.get("dst_node_ip", None) + src_node_ipv6 = json_data.get("src_node_ipv6", None) + dst_node_ipv6 = json_data.get("dst_node_ipv6", None) + vlan_id = json_data.get("vlan_id", None) + bandwidth = json_data.get("bandwidth", None) + latency = json_data.get("latency", None) + latency_version = json_data.get("latency_version", None) + reliability = json_data.get("reliability", None) + tolerance = json_data.get("tolerance", None) + packet_reorder = json_data.get("packet_reorder", None) + num_pack = json_data.get("num_pack", None) + pack_reorder = json_data.get("pack_reorder", None) + num_reorder = json_data.get("num_reorder", None) + max_reorder = json_data.get("max_reorder", None) + drop_version = json_data.get("drop_version", None) + desv_reorder = json_data.get("desv_reorder", None) + packets_drop = json_data.get("packets_drop", None) + drops = json_data.get("drops", None) + desv_drop = json_data.get("desv_drop", None) + + # --- Variables de configuración --- + + # Configuración de IPv4 / IPv6 + if src_node_ip and dst_node_ip: + if isinstance(ipaddress.ip_address(src_node_ip), ipaddress.IPv4Address) and isinstance(ipaddress.ip_address(dst_node_ip), ipaddress.IPv4Address): + configuraciones['ipv4'] = self.ipv4(src_node_ip, dst_node_ip, 5) + if src_node_ipv6 and dst_node_ipv6: + if isinstance(ipaddress.ip_address(src_node_ipv6), ipaddress.IPv6Address) and isinstance(ipaddress.ip_address(dst_node_ipv6), ipaddress.IPv6Address): + configuraciones['ipv6'] = self.ipv6(src_node_ipv6, dst_node_ipv6) + + # VLAN + if vlan_id: + configuraciones['vlan'] = self.vlan(int(vlan_id)) + + # Policer + if bandwidth: + configuraciones['policer'] = self.policer(bandwidth) + + # Latencia + if latency: + if float(latency) > 0: + configuraciones['ethernetDelay'] = self.delay_gui(float(latency), latency_version, float(tolerance)) + + # Packet Reorder + if packet_reorder: + configuraciones['reorder'] = self.packetReorder(num_reorder, pack_reorder, num_pack, max_reorder, packet_reorder, desv_reorder) + + # Packet Reorder when reliability + if reliability: + configuraciones['reorder'] = self.packetReorder(int(reliability)) + + #Dropper + if drop_version: + configuraciones['packetDrop'] = self.packetDrop(drops, packets_drop, drop_version, desv_drop) + + # Agregar perfil + num_profiles = len(dataProfile.get("profiles", [])) + configuracion_perfil = self.configuracion_total(configuraciones, f"profile{num_profiles + 1}") + dataProfile['profiles'].append(configuracion_perfil) + logging.info(f"Configuración del perfil: {configuracion_perfil}") + + # Enviar la configuración + automatizacion.envio_peticion(ip, puerto, dataProfile) + return automatizacion.obtener_informacion_puerto(ip, puerto) + + + ## FUNCIONES DE CONFIGURACIÓN DE PUERTO ## + + def delay(self,delay_perfil): + ''' + Inputs: -delay_perfil: the delay we want to configurate. + Outputs: the information of the delay for the controller. + Work: Creates the configuration JSON for delay of the controller. + + ''' + delay_perfil = input("Enter the delay you want to set in the test_api profile: ") + print(f"delay en main: {delay_perfil}") + delay_type = input("Select one option of stadistics:\n1)None\t2)Gaussian\n3)Internet\n(Type the number)") + configuracion_delay = automatizacion.añadir_configuracion_puerto_delay(delay_perfil,delay_type) + print(f"Config delay:\n{configuracion_delay}") + return configuracion_delay + + def delay_gui(self,delay_perfil, latency_version, max_latency): + ''' + Inputs: -delay_perfil: the delay we want to configurate. + Outputs: the information of the delay for the controller. + Work: Creates the configuration JSON for delay of the controller. + + ''' + print(f'\nPero: {max_latency}\n') + configuracion_delay = automatizacion.añadir_configuracion_puerto_delay(delay_perfil,latency_version,max_latency) + return configuracion_delay + + def ipv4(self,source_ip,destination_ip,prt): + ''' + Inputs: -source_ip: the source IPv4 we want to configurate. + -destination_ip: the destination IPv4 we want to configurate. + -prt: the protocol we want to configurate + Outputs: the information of the IPv4 for the controller. + Work: Creates the configuration JSON for IPv4 of the controller. + Notes: by default, the protocol is TCP (6). + + ''' + source_hx=None + destination_hx=None + protocolo=None + if source_ip: + source_hx=hex(int(ipaddress.IPv4Address(source_ip)))[2:] + if destination_ip: + destination_hx=hex(int(ipaddress.IPv4Address(destination_ip)))[2:] + if prt: + protocolo="4" if prt=="IP" else "6" + configuracion_puerto=automatizacion.añadir_configuracion_puerto_ipv4(source_hx, destination_hx, protocolo) + return configuracion_puerto + + def ipv6(self,source, destination): + ''' + Inputs: -source: the source IPv6 we want to configurate. + -destination: the destination IPv6 we want to configurate. + Outputs: the information of the IPv6 for the controller. + Work: Creates the configuration JSON for IPv6 of the controller. + + ''' + if source: + source=ipaddress.IPv6Address(source).exploded.replace(":", "") + elif not source: source=None + if destination: + destination=ipaddress.IPv6Address(destination).exploded.replace(":", "") + elif not destination: destination=None + configuracion_puerto=automatizacion.añadir_configuracion_puerto_ipv6(source, destination) + return configuracion_puerto + + def vlan(self,vlan_id): + ''' + Inputs: -vlan_id: the VLAN we want to configurate. + Outputs: the information of the VLAN for the controller. + Work: Creates the configuration JSON for VLAN of the controller. + + ''' + configuracion_vlan=automatizacion.añadir_configuracion_VLAN(vlan_id) + return configuracion_vlan + + def packetDrop(self, drop, total,version,dev): + ''' + Inputs: + Outputs: the information of the packet drop configuration for the controller. + Work: Creates the configuration JSON for packet drop of the controller. + + ''' + configuracionPD=automatizacion.añadir_configuración_packetDrop(drop,total,version,dev) + return configuracionPD + + def policer(self,bandwidth): + ''' + Inputs: -bandwidth: the TX bandwdth we want to configurate. + Outputs: the information of the TX bandwidth for the controller. + Work: Creates the configuration JSON for the TX bandwidth of the controller. + + ''' + configuracion_policer=automatizacion.añadir_configuracion_policer(bandwidth) + return configuracion_policer + + def shaper(self): + ''' + Inputs: + Outputs: the information of the RX bandwidth for the controller. + Work: Creates the configuration JSON for the RX bandwidth of the controller. + + ''' + bandwidth=int(input('Introduzca el ancho de banda (Kbps): ')) + configuracion_policer=automatizacion.añadir_configuracion_shaper(bandwidth) + return configuracion_policer + + def packetReorder(self,reorder,packages=None, npackagesreorder=None, maxreord=None, version=None, stev=None): + print(f"\n\n\nNEII ANTES DEL PASO\nPACKAGES:{packages}\nREORDER:{reorder}\nMAXREORD:{maxreord}\nNPACKAGESORDER:{npackagesreorder}\n\n\n") + configuracion_reorder=automatizacion.añadir_configuracion_reorder(packages,reorder,npackagesreorder, maxreord, version, stev) + return configuracion_reorder + + def configuracion_total(self,configuraciones, nombre_perfil): + ''' + Inputs: -configuraciones: the informtion of all the configurations for the controller. + -nombre_perfil: the name of the profile where the information is going to be allocated. + Outputs: the information of a configurated profile. + Work: Creates the configuration JSON for a profile for the controller. + + ''' + perfil = { + 'tag': nombre_perfil, + 'dramAllocation': {}, + 'rules': [], + 'ethernetDelay': {'enabled': False}, + 'packetDrop': {'enabled': False}, + 'enabled':True + } + if 'ipv4' in configuraciones: + ipv4_config = configuraciones['ipv4'] + perfil['dramAllocation'] = ipv4_config['profiles'][0]['dramAllocation'] + perfil['rules'].extend(ipv4_config['profiles'][0]['rules']) + if 'ipv6' in configuraciones: + ipv6_config = configuraciones['ipv6'] + perfil['rules'].extend(ipv6_config['profiles'][0]['rules']) + if 'vlan' in configuraciones: + vlan_config = configuraciones['vlan'] + perfil['rules'].extend(vlan_config['profiles'][0]['rules']) + if 'ethernetDelay' in configuraciones: + perfil['ethernetDelay'] = configuraciones['ethernetDelay']['ethernetDelay'] + if 'packetDrop' in configuraciones: + perfil['packetDrop'] = configuraciones['packetDrop']['packetDrop'] + if 'policer' in configuraciones: + perfil['policer']=configuraciones['policer']['policer'] + if 'shaper' in configuraciones: + perfil['shaper']=configuraciones['shaper']['shaper'] + if 'reorder' in configuraciones: + perfil['reorder']=configuraciones['reorder']['reorder'] + return perfil + +if __name__=="__main__": + controller=NEII_controller() + controller.menu_principal() \ No newline at end of file diff --git a/src/realizers/ixia/automatizacion_ne2v4.py b/src/realizers/ixia/automatizacion_ne2v4.py new file mode 100644 index 0000000..bc822a0 --- /dev/null +++ b/src/realizers/ixia/automatizacion_ne2v4.py @@ -0,0 +1,454 @@ +###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. +###SPDX-License-Identifier: AGPL-3.0-or-later + +import requests +class automatizacion: + def obtener_informacion_ip(ip): + ''' + Gets the information IP of the NE2 + Args: + ip: IP. + Returns: + A dictionary with the IP infotmationx. + ''' + url= "http://"+ip+"/api/actions/ipInfo" + body= {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code==200: + return response.json() + else: + print(f"error al obtener la informacion de la IP; {response.status_code}") + return None + + def obtener_informacion_hardware(ip): + """ + Obtiene información de una dirección IP. + + Args: + ip: La dirección IP del NE2. + + Returns: + Un diccionario con la información de IP. + """ + url = "http://"+ip+"/api/actions/hwInfo" + body = {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code == 200: + return response.json() + else: + print(f"Error al obtener la información de la IP: {response.status_code}") + return None + + def obtener_informacion_puerto(ip,puerto): + """ + Obtiene información de una dirección IP. + + Args: + ip: La dirección IP del NE2. + + Returns: + Un diccionario con la información de IP. + """ + url = "http://"+ip+"/api/hw/Port/"+puerto + body = {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code == 200: + return response.json() + else: + print(f"Error al obtener la información de la IP: {response.status_code}") + return None + + def añadir_configuracion_puerto_delay(delay, latency_type, max_latency): + """ + Añade una configuración de puerto según su delay a un NE2. + + Args: + delay (int): Cantidad de delay en la simulación. + + Returns: + La respuesta de la API (texto). + """ + configuracion=None + print(f'\n\nTipo de latencia: {latency_type}\n latencia: {delay}\n') + if latency_type=='1' or latency_type==None: + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': 15.0, 'isUncorrelated': False, 'maxNegDelta': 0.1, 'pdvMode': 'NONE', 'delayMin': 5.0, 'units': 'MS', 'maxPosDelta': 0.1, 'enabled': True, 'spread': 1.0}} + if latency_type=='2' or latency_type=='gauss': + delay_f=float(delay) + ancho=float(max_latency) + max_delay=delay_f+ancho + min_delay=delay_f-ancho + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': max_delay, 'isUncorrelated': False,'maxNegDelta': ancho/3, 'pdvMode': 'GAUSSIAN', 'delayMin':min_delay, 'units': 'MS', 'maxPosDelta':ancho/3, 'enabled': True, 'spread': 1.58}} + if latency_type =='3' or latency_type=='internet': + ancho=float(max_latency) + max_delay = float(delay)+0.9*float(ancho) + min_delay = float(delay)-0.1*float(ancho) + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': max_delay, 'isUncorrelated': False, 'maxNegDelta': 0.4, 'pdvMode': 'INTERNET', 'delayMin': min_delay, 'units': 'MS', 'maxPosDelta': 0.5, 'enabled': True, 'spread': 100.0}} + print(f"\n\nConf Delay: {configuracion}\n") + return configuracion + + def añadir_configuracion_puerto_ipv4(source_hx,destination_hx,protocolo): + """ + Añade una configuración de puerto según las IPv4s de origen y destino de la comunicación. + + Args: + source_hx (int): Dirección IPv4 de origen en hexadecimal. + destination_hx (int): Dirección IPv4 de destino en hexadecimal. + protocolo (string): Numero asociado al protocolo elegido. + + Returns: + La respuesta de la API (texto). + """ + reglas = [{"field": "Common::IPv4::Version", "value": "4", "mask": "f"}] + if source_hx: + reglas.append({"field": "Common::IPv4::Source Address", "value": source_hx, "mask": "ffffffff"}) + if destination_hx: + reglas.append({"field": "Common::IPv4::Destination Address", "value": destination_hx, "mask": "ffffffff"}) + if protocolo: + reglas.append({"field": "Common::IPv4::Protocol", "value": protocolo, "mask": "ff"}) + configuracion = {"profiles": [{"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"rules": reglas,"tag": "test_api"}],"defaultProfile": {"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"tag": "defaultProfile"}} + return configuracion + + def añadir_configuracion_puerto_ipv6(source,destination): + """ + Añade una configuración de puerto según las IPv6s de origen y destino de la comunicación. + + Args: + source (int): Dirección IPv6 de origen en hexadecimal. + destination (int): Dirección IPv6 de destino en hexadecimal. + + Returns: + La respuesta de la API (texto). + """ + reglas=[{'field': 'Common::IPv6::Version', 'bitRange': 'L3@0[7]+3', 'value': '6', 'mask': 'f'}] + if source: + reglas.append({'field': 'Common::IPv6::Source Address', 'bitRange': 'L3@8[7]+127', 'value': source, 'mask': 'ffffffffffffffffffffffffffffffff'}) + if destination: + reglas.append({'field': 'Common::IPv6::Destination Address', 'bitRange': 'L3@24[7]+127', 'value': destination, 'mask': 'ffffffffffffffffffffffffffffffff'}) + configuracion = {"profiles": [{"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"rules": reglas,"tag": "test_api"}],"defaultProfile": {"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"tag": "defaultProfile"}} + return configuracion + + def añadir_configuracion_VLAN(vlan): + """ + Añade una configuración de puerto según su VLAN. + + Args: + vlan (int): Número de identificación de la VLAN. + + Returns: + La respuesta de la API (texto). + """ + vlan=hex(vlan)[2:] + configuracion={'profiles': [{'dramAllocation': {'mode': 'AUTO', 'fixedSize': 1700352}, 'rules': [{'field': 'Common::Second Tag::VLAN ID', 'bitRange': 'L2@18[3]+11', 'value': vlan, 'mask': 'fff'}]}]} + return configuracion + + def añadir_configuración_packetDrop(drops,total): + """ + Añade una configuración de puerto según su configuracion de packet Drop un NE2. + + Args: + drops (int): cantidad de paquetes dropeados + total (int): cantidad total de paquetes + + Returns: + La respuesta de la API (texto). + """ + configuracion={'packetDrop': {'rdmSel': {'dist': 'PERIODIC', 'burstlen': drops, 'interval': total, 'stddev': 10.0}, 'enabled': True}} + return configuracion + + def añadir_configuracion_policer(bitrate): + """ + Añade una configuración de puerto según su TX bandwidth a un NE2. + + Args: + bitrate (int): bandwith en Tx + + Returns: + La respuesta de la API (texto). + """ + configuracion={'policer':{'excessBitRate': bitrate, 'excessBurstTolerance': 64000, 'commitedBurstTolerance': 64000, 'commitedBitRate': bitrate, 'enabled': True, 'enableRateCoupling': False}} + return configuracion + + def añadir_configuracion_shaper(bitrate): + """ + Añade una configuración de puerto según su RX bandwidth a un NE2. + + Args: + bitrate (int): bandwith en Rx + + Returns: + La respuesta de la API (texto). + """ + configuracion={'shaper': {'burstTolerance': 64000, 'bitRate': bitrate, 'enabled': True}} + return configuracion + + def añadir_configuracion_reorder(reorder): + """ + Adds reorder configuration. + + Args: + reorder (int): reorder + + Returns: + response of the API (texto). + """ + reorder=100-reorder + print(f"\nReorder:{reorder}\n") + configuracion={"reorder": {"rdmSel": {"dist": "PERIODIC", "burstlen": reorder, "interval": 100, "stddev": 10.0 }, "reorderByMin": 1, "reorderByMax": 5, "enabled": True}} #Los demas valores los he dejado como defecto por no poder configurarlos + return configuracion + + def envio_peticion(ip,puerto, configuracion): + """ + Envía una configuración de puerto a un NE2. + + Args: + ip (int): IP del NE2 + puerto: número del puerto a configurar + configuración: la información que se quiere configurar en el puerto + + Returns: + La respuesta de la API (texto). + """ + +import requests +class automatizacion: + def obtener_informacion_ip(ip): + ''' + obtiene informacion ip del NE2 + Args: + ip: la direccion IP del NE2. + + Returns: + un diccionario con la informacion de IP. + ''' + url= "http://"+ip+"/api/actions/ipInfo" + body= {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code==200: + return response.json() + else: + print(f"error al obtener la informacion de la IP; {response.status_code}") + return None + + def obtener_informacion_hardware(ip): + """ + Obtiene información de una dirección IP. + + Args: + ip: La dirección IP del NE2. + + Returns: + Un diccionario con la información de IP. + """ + url = "http://"+ip+"/api/actions/hwInfo" + body = {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code == 200: + return response.json() + else: + print(f"Error al obtener la información de la IP: {response.status_code}") + return None + + def obtener_informacion_puerto(ip,puerto): + """ + Obtiene información de una dirección IP. + + Args: + ip: La dirección IP del NE2. + + Returns: + Un diccionario con la información de IP. + """ + url = "http://"+ip+"/api/hw/Port/"+puerto + body = {"ip": ip} + response = requests.get(url, json=body, auth=('admin', 'admin')) + if response.status_code == 200: + return response.json() + else: + print(f"Error al obtener la información de la IP: {response.status_code}") + return None + + def añadir_configuracion_puerto_delay(delay, latency_type, max_latency): + """ + Añade una configuración de puerto según su delay a un NE2. + + Args: + delay (int): Cantidad de delay en la simulación. + + Returns: + La respuesta de la API (texto). + """ + configuracion=None + print(f'\n\nTipo de latencia: {latency_type}\n latencia: {delay}\n') + if latency_type=='1' or latency_type==None: + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': 15.0, 'isUncorrelated': False, 'maxNegDelta': 0.1, 'pdvMode': 'NONE', 'delayMin': 5.0, 'units': 'MS', 'maxPosDelta': 0.1, 'enabled': True, 'spread': 1.0}} + if latency_type=='2' or latency_type=='gauss': + delay_f=float(delay) + ancho=float(max_latency) + max_delay=delay_f+ancho + min_delay=delay_f-ancho + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': max_delay, 'isUncorrelated': False,'maxNegDelta': ancho/3, 'pdvMode': 'GAUSSIAN', 'delayMin':min_delay, 'units': 'MS', 'maxPosDelta':ancho/3, 'enabled': True, 'spread': 1.58}} + if latency_type =='3' or latency_type=='internet': + ancho=float(max_latency) + max_delay = float(delay)+0.9*float(ancho) + min_delay = float(delay)-0.1*float(ancho) + configuracion={'ethernetDelay': {'delay': delay, 'delayMax': max_delay, 'isUncorrelated': False, 'maxNegDelta': 0.4, 'pdvMode': 'INTERNET', 'delayMin': min_delay, 'units': 'MS', 'maxPosDelta': 0.5, 'enabled': True, 'spread': 100.0}} + print(f"\n\nConf Delay: {configuracion}\n") + return configuracion + + def añadir_configuracion_puerto_ipv4(source_hx,destination_hx,protocolo): + """ + Añade una configuración de puerto según las IPv4s de origen y destino de la comunicación. + + Args: + source_hx (int): Dirección IPv4 de origen en hexadecimal. + destination_hx (int): Dirección IPv4 de destino en hexadecimal. + protocolo (string): Numero asociado al protocolo elegido. + + Returns: + La respuesta de la API (texto). + """ + reglas = [{"field": "Common::IPv4::Version", "value": "4", "mask": "f"}] + if source_hx: + reglas.append({"field": "Common::IPv4::Source Address", "value": source_hx, "mask": "ffffffff"}) + if destination_hx: + reglas.append({"field": "Common::IPv4::Destination Address", "value": destination_hx, "mask": "ffffffff"}) + if protocolo: + reglas.append({"field": "Common::IPv4::Protocol", "value": protocolo, "mask": "ff"}) + configuracion = {"profiles": [{"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"rules": reglas,"tag": "test_api"}],"defaultProfile": {"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"tag": "defaultProfile"}} + return configuracion + + def añadir_configuracion_puerto_ipv6(source,destination): + """ + Añade una configuración de puerto según las IPv6s de origen y destino de la comunicación. + + Args: + source (int): Dirección IPv6 de origen en hexadecimal. + destination (int): Dirección IPv6 de destino en hexadecimal. + + Returns: + La respuesta de la API (texto). + """ + reglas=[{'field': 'Common::IPv6::Version', 'bitRange': 'L3@0[7]+3', 'value': '6', 'mask': 'f'}] + if source: + reglas.append({'field': 'Common::IPv6::Source Address', 'bitRange': 'L3@8[7]+127', 'value': source, 'mask': 'ffffffffffffffffffffffffffffffff'}) + if destination: + reglas.append({'field': 'Common::IPv6::Destination Address', 'bitRange': 'L3@24[7]+127', 'value': destination, 'mask': 'ffffffffffffffffffffffffffffffff'}) + configuracion = {"profiles": [{"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"rules": reglas,"tag": "test_api"}],"defaultProfile": {"dramAllocation": {"mode": "AUTO","fixedSize": 1700352},"tag": "defaultProfile"}} + return configuracion + + def añadir_configuracion_VLAN(vlan): + """ + Añade una configuración de puerto según su VLAN. + + Args: + vlan (int): Número de identificación de la VLAN. + + Returns: + La respuesta de la API (texto). + """ + vlan=hex(vlan)[2:] + configuracion={'profiles': [{'dramAllocation': {'mode': 'AUTO', 'fixedSize': 1700352}, 'rules': [{'field': 'Common::Second Tag::VLAN ID', 'bitRange': 'L2@18[3]+11', 'value': vlan, 'mask': 'fff'}]}]} + return configuracion + + def añadir_configuración_packetDrop(drops,total,version,desv): + """ + Añade una configuración de puerto según su configuracion de packet Drop un NE2. + + Args: + drops (int): cantidad de paquetes dropeados + total (int): cantidad total de paquetes + version (string): version of the probability + + Returns: + La respuesta de la API (texto). + """ + if version != "GAUSSIAN" and version !="POISSON": + configuracion={'packetDrop': {'rdmSel': {'dist': version, 'burstlen': drops, 'interval': total, 'stddev': 10.0}, 'enabled': True}} + else: + configuracion={'packetDrop': {'rdmSel': {'dist': version, 'burstlen': drops, 'interval': total, 'stddev': desv}, 'enabled': True}} + return configuracion + + def añadir_configuracion_policer(bitrate): + """ + Añade una configuración de puerto según su TX bandwidth a un NE2. + + Args: + bitrate (int): bandwith en Tx + + Returns: + La respuesta de la API (texto). + """ + configuracion={'policer':{'excessBitRate': bitrate, 'excessBurstTolerance': 64000, 'commitedBurstTolerance': 64000, 'commitedBitRate': bitrate, 'enabled': True, 'enableRateCoupling': False}} + return configuracion + + def añadir_configuracion_shaper(bitrate): + """ + Añade una configuración de puerto según su RX bandwidth a un NE2. + + Args: + bitrate (int): bandwith en Rx + + Returns: + La respuesta de la API (texto). + """ + configuracion={'shaper': {'burstTolerance': 64000, 'bitRate': bitrate, 'enabled': True}} + return configuracion + + def añadir_configuracion_reorder(packages,reorder,npackagesreorder, maxreord, version, stev): + """ + Adds reorder configuration. + + Args: + packages: number of packages total + reorder: number of packages to reorder + npackagesreorder: number of packages of reorder + maxreord: total number of packages of reorder + version: version of reorder + stev: desviation + + Returns: + response of the API (text). + """ + if packages is not None and npackagesreorder is not None and maxreord is not None: + reorderByMin = min(npackagesreorder, maxreord) + reorderByMax = max(npackagesreorder, maxreord) + if version != 'GAUSSIAN': + configuracion={"reorder": {"rdmSel": {"dist": version, "burstlen": reorder, "interval": packages, "stddev": 10.0 }, "reorderByMin": reorderByMin, "reorderByMax": reorderByMax, "enabled": True}} + else: + configuracion={"reorder": {"rdmSel": {"dist": "GAUSSIAN", "burstlen": reorder, "interval": packages, "stddev": stev }, "reorderByMin": reorderByMin, "reorderByMax": reorderByMax, "enabled": True}} + if int(reorder) <= 0: + configuracion["filterWarning"] = "El valor de reorder es inválido, está fuera del rango permitido." + else: + reorder=10000-reorder + configuracion={"reorder": {"rdmSel": {"dist": "PERIODIC", "burstlen": int(reorder/100), "interval": 100, "stddev": 10.0 }, "reorderByMin": 1, "reorderByMax": 5, "enabled": True}} + return configuracion + + def envio_peticion(ip,puerto, configuracion): + """ + Envía una configuración de puerto a un NE2. + + Args: + ip (int): IP del NE2 + puerto: número del puerto a configurar + configuración: la información que se quiere configurar en el puerto + + Returns: + La respuesta de la API (texto). + """ + print(f'\nCONFIGURACION\n{configuracion}') + url = f"http://{ip}/api/hw/Port/{puerto}" + response = requests.put(url, json=configuracion, auth=('admin', 'admin')) + + if response.status_code == 200: + print(f'\n{configuracion}') + return response.text + else: + try: + error_info = response.json() + except ValueError: + error_info = response.text + + print(f"\n\nError al añadir configuración de puerto: {response.status_code}") + print(f"Mensaje de error: {error_info}") + print(f"Configuración enviada: {configuracion}\n\n") + return None \ No newline at end of file diff --git a/src/templates/L2-VPN_template_empty.json b/src/templates/L2-VPN_template_empty.json index 85caed0..9c2137c 100644 --- a/src/templates/L2-VPN_template_empty.json +++ b/src/templates/L2-VPN_template_empty.json @@ -12,8 +12,6 @@ {"device_id": {"device_uuid": {"uuid": ""}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}} ], "service_constraints": [ - {"custom": {"constraint_type": "bandwidth[kbps]", "constraint_value": "0"}}, - {"custom": {"constraint_type": "latency[ms]", "constraint_value": "0"}} ], "service_config": {"config_rules": [ {"action": 1, "custom": {"resource_key": "/settings", "resource_value": { diff --git a/src/templates/L2-VPN_template_example.json b/src/templates/L2-VPN_template_example.json index b29e3c6..2d6af09 100644 --- a/src/templates/L2-VPN_template_example.json +++ b/src/templates/L2-VPN_template_example.json @@ -1,271 +1,95 @@ { - "services": [ - { - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l2-acl-svc-17429923732568250" - } - }, - "service_type": 2, - "service_status": { - "service_status": 1 - }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "4.4.4.4" + "services":[ + { + "service_id":{ + "context_id":{ + "context_uuid":{ + "uuid":"admin" + } + }, + "service_uuid":{ + "uuid":"l2-acl-svc-17429923732568250765476542" } - }, - "endpoint_uuid": { - "uuid": "0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "5.5.5.5" + }, + "service_type":2, + "service_status":{ + "service_status":1 + }, + "service_endpoint_ids":[ + { + "device_id":{ + "device_uuid":{ + "uuid":"1.1.1.1" + } + }, + "endpoint_uuid":{ + "uuid":"eth0" + } + }, + { + "device_id":{ + "device_uuid":{ + "uuid":"3.3.3.3" + } + }, + "endpoint_uuid":{ + "uuid":"eth0" + } } - }, - "endpoint_uuid": { - "uuid": "0/0/3-GigabitEthernet0/0/0/3" - } - } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "bandwidth[kbps]", - "constraint_value": "20" - } - }, - { - "custom": { - "constraint_type": "latency[ms]", - "constraint_value": "20" - } - } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": {} + ], + "service_constraints":[ + { + "custom":{ + "constraint_type":"bandwidth[kbps]", + "constraint_value":"20" + } + }, + { + "custom":{ + "constraint_type":"latency[ms]", + "constraint_value":"20" + } } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[4.4.4.4]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 100, - "circuit_id": "100", - "remote_router": "5.5.5.5", - "ni_name": "ELAN100" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[5.5.5.5]/endpoint[0/0/3-GigabitEthernet0/0/0/3]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 100, - "circuit_id": "100", - "remote_router": "4.4.4.4", - "ni_name": "ELAN100" - } - } - } - ] - } - }, - { - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l2-acl-svc-17429923733224160" - } - }, - "service_type": 2, - "service_status": { - "service_status": 1 - }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "4.4.4.4" - } - }, - "endpoint_uuid": { - "uuid": "0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "5.5.5.5" - } - }, - "endpoint_uuid": { - "uuid": "0/0/3-GigabitEthernet0/0/0/3" - } - } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "bandwidth[kbps]", - "constraint_value": "200" - } - }, - { - "custom": { - "constraint_type": "latency[ms]", - "constraint_value": "5" - } - } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": {} - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[4.4.4.4]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 101, - "circuit_id": "101", - "remote_router": "5.5.5.5", - "ni_name": "ELAN101" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[5.5.5.5]/endpoint[0/0/3-GigabitEthernet0/0/0/3]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 101, - "circuit_id": "101", - "remote_router": "4.4.4.4", - "ni_name": "ELAN101" - } - } - } - ] - } - }, - { - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l2-acl-svc-17429923733753200" - } - }, - "service_type": 2, - "service_status": { - "service_status": 1 - }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "4.4.4.4" - } - }, - "endpoint_uuid": { - "uuid": "0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "5.5.5.5" - } - }, - "endpoint_uuid": { - "uuid": "0/0/3-GigabitEthernet0/0/0/3" - } - } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "bandwidth[kbps]", - "constraint_value": "200" - } - }, - { - "custom": { - "constraint_type": "latency[ms]", - "constraint_value": "10" - } - } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": {} - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[4.4.4.4]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 102, - "circuit_id": "102", - "remote_router": "5.5.5.5", - "ni_name": "ELAN102" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[5.5.5.5]/endpoint[0/0/3-GigabitEthernet0/0/0/3]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 102, - "circuit_id": "102", - "remote_router": "4.4.4.4", - "ni_name": "ELAN102" - } - } - } - ] + ], + "service_config":{ + "config_rules":[ + { + "action":1, + "custom":{ + "resource_key":"/settings", + "resource_value":{ + + } + } + }, + { + "action":1, + "custom":{ + "resource_key":"/device[1.1.1.1]/endpoint[eth0]/settings", + "resource_value":{ + "sub_interface_index":0, + "vlan_id":100, + "circuit_id":"100", + "remote_router":"3.3.3.3", + "ni_name":"ELAN100" + } + } + }, + { + "action":1, + "custom":{ + "resource_key":"/device[3.3.3.3]/endpoint[eth0]/settings", + "resource_value":{ + "sub_interface_index":0, + "vlan_id":100, + "circuit_id":"100", + "remote_router":"1.1.1.1", + "ni_name":"ELAN100" + } + } + } + ] + } } - } - ] + ] } \ No newline at end of file diff --git a/src/templates/L3-VPN_template_empty.json b/src/templates/L3-VPN_template_empty.json index e894cfa..41d1f1b 100644 --- a/src/templates/L3-VPN_template_empty.json +++ b/src/templates/L3-VPN_template_empty.json @@ -12,8 +12,6 @@ {"device_id": {"device_uuid": {"uuid": ""}}, "endpoint_uuid": {"uuid": ""}} ], "service_constraints": [ - {"custom": {"constraint_type": "bandwidth[kbps]", "constraint_value": "0"}}, - {"custom": {"constraint_type": "latency[ms]", "constraint_value": "0"}} ], "service_config": {"config_rules": [ {"action": 1, "custom": {"resource_key": "/settings", "resource_value": { diff --git a/src/templates/L3-VPN_template_example.json b/src/templates/L3-VPN_template_example.json index d0a70b7..b4334e9 100644 --- a/src/templates/L3-VPN_template_example.json +++ b/src/templates/L3-VPN_template_example.json @@ -1,102 +1,98 @@ { - "services": [ + "service_id": { + "context_id": { + "context_uuid": { + "uuid": "admin" + } + }, + "service_uuid": { + "uuid": "l3-acl-svc-17536941472398060" + } + }, + "service_type": 1, + "service_status": { + "service_status": 1 + }, + "service_endpoint_ids": [ { - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l3-acl-svc-17258860855224490" + "device_id": { + "device_uuid": { + "uuid": "10.10.10.10" } }, - "service_type": 1, - "service_status": { - "service_status": 1 + "endpoint_uuid": { + "uuid": "0/0/0-GigabitEthernet0/0/0/0" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "11.11.11.11" + } }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "4.4.4.4" - } - }, - "endpoint_uuid": { - "uuid": "0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "5.5.5.5" - } - }, - "endpoint_uuid": { - "uuid": "0/0/1-GigabitEthernet0/0/0/1" + "endpoint_uuid": { + "uuid": "0/0/0-GigabitEthernet0/0/0/0" + } + } + ], + "service_constraints": [ + { + "custom": { + "constraint_type": "one-way-bandwidth[Mbps]", + "constraint_value": "10" + } + }, + { + "custom": { + "constraint_type": "one-way-delay-maximum[milliseconds]", + "constraint_value": "30" + } + } + ], + "service_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "/settings", + "resource_value": { + "bgp_as": 65000, + "route_distinguisher": "65000:533" } } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "bandwidth[kbps]", - "constraint_value": "120" - } - }, - { - "custom": { - "constraint_type": "latency[ms]", - "constraint_value": "2" + }, + { + "action": 1, + "custom": { + "resource_key": "/device[10.10.10.10]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", + "resource_value": { + "router_id": "11.11.11.11", + "sub_interface_index": 0, + "vlan_id": 200, + "address_ip": "11.11.11.11", + "address_prefix": 16, + "policy_AZ": "policyA", + "policy_ZA": "policyB", + "ni_name": "ELAN200" } } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": { - "bgp_as": 65000, - "route_distinguisher": "65000:533" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[4.4.4.4]/endpoint[0/0/1-GigabitEthernet0/0/0/1]/settings", - "resource_value": { - "router_id": "5.5.5.5", - "sub_interface_index": 0, - "vlan_id": 300, - "address_ip": "5.5.5.5", - "address_prefix": 16, - "policy_AZ": "policyA", - "policy_ZA": "policyB", - "ni_name": "ELAN300" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[5.5.5.5]/endpoint[0/0/1-GigabitEthernet0/0/0/1]/settings", - "resource_value": { - "router_id": "4.4.4.4", - "sub_interface_index": 0, - "vlan_id": 300, - "address_ip": "4.4.4.4", - "address_prefix": 16, - "policy_AZ": "policyA", - "policy_ZA": "policyB", - "ni_name": "ELAN300" - } - } + }, + { + "action": 1, + "custom": { + "resource_key": "/device[11.11.11.11]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", + "resource_value": { + "router_id": "10.10.10.10", + "sub_interface_index": 0, + "vlan_id": 200, + "address_ip": "10.10.10.10", + "address_prefix": 16, + "policy_AZ": "policyA", + "policy_ZA": "policyB", + "ni_name": "ELAN200" } - ] + } } - } - ] + ] + } } \ No newline at end of file diff --git a/src/templates/ietf_template_empty.json b/src/templates/ietf_template_empty.json index b4fb81f..fc458ea 100644 --- a/src/templates/ietf_template_empty.json +++ b/src/templates/ietf_template_empty.json @@ -7,16 +7,6 @@ "description":"", "slo-policy":{ "metric-bound":[ - { - "metric-type":"one-way-bandwidth", - "metric-unit":"kbps", - "bound":"" - }, - { - "metric-type":"one-way-delay-maximum", - "metric-unit":"milliseconds", - "bound":"" - } ] }, "sle-policy":{ diff --git a/src/templates/ietf_template_example.json b/src/templates/ietf_template_example.json index 8278220..d9a660f 100644 --- a/src/templates/ietf_template_example.json +++ b/src/templates/ietf_template_example.json @@ -1,158 +1,149 @@ -{ - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "kbps", - "bound": 2 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { +[ + { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-0bbf32f4-aa3d-4ef1-b3fb-806f4ed73912", + "description": "", + "slo-policy": { + "metric-bound": [] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", "diversity": { - "diversity-type": "" + "diversity": { + "diversity-type": "" + } } } } } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-366e05b7-34e6-4597-9e28-e580abaeda71", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" + ] + }, + "slice-service": [ + { + "id": "slice-service-561d9dd7-c2e0-40c9-a222-ec6913ea5a57", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-0bbf32f4-aa3d-4ef1-b3fb-806f4ed73912" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "1.1.1.1", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ { - "sdp-id": "01" - }, + "index": 1, + "match-type": "VLAN", + "value": null, + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ { - "sdp-id": "02" + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} } ] - } - ], - "status": {} - } - ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "3.3.3.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": null, + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "3.3.3.3" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } } - } - ] + ] + } } -} \ No newline at end of file +] \ No newline at end of file diff --git a/src/templates/test_service.json b/src/templates/test_service.json deleted file mode 100644 index bd956b7..0000000 --- a/src/templates/test_service.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "services": [ - { - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l2-acl-svc-17387469754519430" - } - }, - "service_type": 2, - "service_status": { - "service_status": 1 - }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "172.16.185.31" - } - }, - "endpoint_uuid": { - "uuid": "eth-1/0/22" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "172.16.185.32" - } - }, - "endpoint_uuid": { - "uuid": "eth-1/0/6" - } - } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "bandwidth[kbps]", - "constraint_value": "20" - } - }, - { - "custom": { - "constraint_type": "latency[ms]", - "constraint_value": "20" - } - } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": {} - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[172.16.185.31]/endpoint[eth-1/0/22]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 100, - "circuit_id": "100", - "remote_router": "172.16.185.32", - "ni_name": "ELAN100" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[172.16.185.32]/endpoint[eth-1/0/6]/settings", - "resource_value": { - "sub_interface_index": 0, - "vlan_id": 100, - "circuit_id": "100", - "remote_router": "172.16.185.31", - "ni_name": "ELAN100" - } - } - } - ] - } - } - ] - } \ No newline at end of file diff --git a/src/webui/gui.py b/src/webui/gui.py new file mode 100644 index 0000000..82f414d --- /dev/null +++ b/src/webui/gui.py @@ -0,0 +1,462 @@ +###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. +###SPDX-License-Identifier: AGPL-3.0-or-later + +import json, logging, uuid +import requests +import os +import pandas as pd +from flask import Flask, render_template, request, jsonify, redirect, url_for, session, Blueprint +from collections import OrderedDict +from src.Constants import SRC_PATH, NSC_PORT, TEMPLATES_PATH, DUMMY_MODE +from src.realizers.ixia.NEII_V4 import NEII_controller + +# app =Flask(__name__) +gui_bp = Blueprint('gui', __name__, template_folder=os.path.join(SRC_PATH, 'webui', 'templates'), static_folder=os.path.join(SRC_PATH, 'webui', 'static'), static_url_path='/webui/static') + +#Variables for dev accessing +USERNAME = 'admin' +PASSWORD = 'admin' +enter=False + +def __safe_int(value): + try: + if isinstance(value, str): + value = value.strip().replace(',', '.') + number = float(value) + return int(number) if number.is_integer() else number + except (ValueError, TypeError, AttributeError): + return None + +def __build_request_ietf(src_node_ip=None, dst_node_ip=None, vlan_id=None, bandwidth=None, latency=None, tolerance=0, latency_version=None, reliability=None): + ''' + Work: Build the IETF template for the intent + ''' + # Open and read the template file + with open(os.path.join(TEMPLATES_PATH, 'ietf_template_empty.json'), 'r') as source: + # Clean up the JSON template + template = source.read().replace('\t', '').replace('\n', '').replace("'", '"').strip() + request = json.loads(template) + + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"] = f"qos-profile-{uuid.uuid4()}" + + # Generate unique slice service ID and description + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"] = f"slice-service-{uuid.uuid4()}" + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["slo-sle-policy"]["slo-sle-template"] = request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"] + + # Configure Source SDP + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["node-id"] = "source-node" #Pendiente de rellenar + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["sdp-ip-address"] = src_node_ip + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["match-type"] = "VLAN" + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["value"] = vlan_id + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["ac-ipv4-address"] = "" # Pendiente de rellenar + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] = src_node_ip + + # Configure Destination SDP + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["node-id"] = "destination-node" + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["sdp-ip-address"] = dst_node_ip + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["service-match-criteria"]["match-criterion"][0]["match-type"] = "VLAN" + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["service-match-criteria"]["match-criterion"][0]["value"] = vlan_id + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["ac-ipv4-address"] = ""# Pendiente de rellenar + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] = dst_node_ip + + # Configure Connection Group and match-criteria + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["connection-groups"]["connection-group"][0]["id"] = "source-node_destination-node" #Pendiente de rellenar + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["target-connection-group-id"] = "" #Pendiente de rellenar + request["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["service-match-criteria"]["match-criterion"][0]["target-connection-group-id"] = "" #Pendiente de rellenar + + # Populate template with SLOs (currently supporting QoS profile, latency and bandwidth) + if bandwidth: + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"].append({ + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": __safe_int(bandwidth) + }) + if latency: + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"].append({ + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": __safe_int(latency) + }) + # Configure gaussian latency or internet if specified + if latency_version: + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["description"] = latency_version + if tolerance: + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"].append( { + "metric-type": "one-way-delay-variation-maximum", + "metric-unit": "milliseconds", + "bound": __safe_int(tolerance) + }) + if reliability: + request["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["sle-policy"]["reliability"] = __safe_int(reliability) + + return request + +def __build_request(ip_version=None, src_node_ip=None, dst_node_ip=None, src_node_ipv6=None, dst_node_ipv6=None, + vlan_id=None, bandwidth=None, latency=None, tolerance=0, latency_version=None, + reliability=None, packet_reorder=None, num_pack=None, pack_reorder=None, num_reorder=None, + max_reorder=None, desv_reorder=None, drop_version=None, packets_drop=None, + drops=None, desv_drop=None): + ''' + Work: Build the template for the IXIA NEII + ''' + json_data = { + "ip_version": ip_version, + "src_node_ip": src_node_ip, + "dst_node_ip": dst_node_ip, + "src_node_ipv6": src_node_ipv6, + "dst_node_ipv6": dst_node_ipv6, + "vlan_id": vlan_id, + "bandwidth": bandwidth, + "latency": latency, + "tolerance": tolerance, + "latency_version": latency_version, + "reliability": reliability, + "packet_reorder": packet_reorder, + "num_pack": num_pack, + "pack_reorder": pack_reorder, + "num_reorder": num_reorder, + "max_reorder": max_reorder, + "desv_reorder": desv_reorder, + "drop_version": drop_version, + "packets_drop": packets_drop, + "drops": drops, + "desv_drop": desv_drop + } + return json_data + +def __datos_json(): + try: + with open(os.path.join(SRC_PATH, 'slice_ddbb.json'), 'r') as fichero: + datos =json.load(fichero) + print(datos) + rows =[] + for source_ip, source_info in datos["source"].items(): + vlan = source_info["vlan"] + for dest_ip, dest_info in source_info["destination"].items(): + row ={ + "Source IP": source_ip, + "Destiny IP": dest_ip, + "VLAN": vlan, + "attributes": dest_info["attributes"] + } + rows.append(row) + dataframe =pd.DataFrame(rows) + except FileNotFoundError: + dataframe =pd.DataFrame() + except ValueError as e: + dataframe =pd.DataFrame() + return dataframe + +@gui_bp.route('/webui') +def home(): + session['enter'] = False + # Leer las IPs actuales del archivo de configuración + try: + with open(os.path.join(SRC_PATH, 'IPs.json')) as f: + ips = json.load(f) + tfs_ip = ips.get('TFS_IP', 'No configurada') + ixia_ip = ips.get('IXIA_IP', 'No configurada') + except Exception: + tfs_ip = 'No configurada' + ixia_ip = 'No configurada' + return render_template('welcome.html', tfs_ip=tfs_ip, ixia_ip=ixia_ip) + +@gui_bp.route('/webui/generate/tfs', methods=['POST','GET']) +def generate_tfs(): + session['enter']=False + if request.method =='POST': + src_node_ip =request.form['src_node_ip'] + dst_node_ip =request.form['dst_node_ip'] + vlan_id =request.form['vlan_id'] + if vlan_id == '': + vlan_id = None + latency =request.form['latency_intent'] + bandwidth =request.form['bandwidth_intent'] + + slice_request = __build_request_ietf(src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, latency=latency, bandwidth=bandwidth) + + # Si 'request' es un diccionario, conviértelo a JSON + json_data = json.dumps(slice_request) + files = { + 'file': ('ietf_template_example.json', json_data, 'application/json') + } + + response = requests.post( + f'http://localhost:{NSC_PORT}/tfs/slice', + headers={ + 'accept': 'application/json' + }, + files=files + ) + response.raise_for_status() + + if response.ok: + return redirect(url_for('gui.generate_tfs', src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, latency=latency, bandwidth=bandwidth)) + else: + return render_template('index.html', error="Error al generar el intent") + + src_node_ip =request.args.get('src_node_ip', '') + dst_node_ip =request.args.get('dst_node_ip', '') + vlan_id =request.args.get('vlan_id', '') + latency =request.args.get('latency', '') + bandwidth =request.args.get('bandwidth', '') + reliability=request.args.get('reliability', '') + + return render_template('index.html', src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, latency=latency, bandwidth=bandwidth, reliability=reliability) + +@gui_bp.route('/webui/generate/ixia', methods=['GET','POST']) +def generate_ixia(): + session['enter']=False + if request.method =='POST': + src_node_ip =request.form['src_node_ip'] + dst_node_ip =request.form['dst_node_ip'] + vlan_id =request.form['vlan_id'] + latency =request.form['latency_intent'] + bandwidth =request.form['bandwidth_intent'] + latency_version="internet" + tolerance= request.form['tolerance_intent'] + reliability=request.form['reliability'] + + if int(reliability)==100: reliability=None + slice_request = __build_request_ietf(src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, bandwidth=bandwidth, latency=latency, latency_version=latency_version, tolerance=tolerance, reliability=reliability) + # Si 'request' es un diccionario, conviértelo a JSON + json_data = json.dumps(slice_request) + files = { + 'file': ('ietf_template_example.json', json_data, 'application/json') + } + + try: + response = requests.post( + f'http://localhost:{NSC_PORT}/ixia/slice', + headers={'accept': 'application/json'}, + files=files + ) + response.raise_for_status() + if response.ok: + return redirect(url_for('gui.generate_ixia', src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, latency=latency, tolerance=tolerance,bandwidth=bandwidth,reliability=reliability)) + except requests.RequestException as e: + print("HTTP error:", e) + return render_template('ixia.html', error="Intent Generation Error") + + src_node_ip =request.args.get('src_node_ip', '') + dst_node_ip =request.args.get('dst_node_ip', '') + vlan_id =request.args.get('vlan_id', '') + latency =request.args.get('latency', '') + tolerance=request.args.get('tolerance', '') + bandwidth =request.args.get('bandwidth', '') + reliability=request.args.get('reliability','') + + return render_template('ixia.html', src_node_ip=src_node_ip, dst_node_ip=dst_node_ip, vlan_id=vlan_id, latency=latency, tolerance=tolerance, bandwidth=bandwidth, reliability=reliability) + + +@gui_bp.route('/webui/dev', methods=['GET', 'POST']) +def develop(): + print('Session content:', dict(session)) + if 'enter' not in session or session['enter'] is False: + return redirect(url_for('gui.login')) + + if request.method == 'POST': + ip_version = request.form.get('ip_version', '') + src_node_ipv4 = request.form.get('src_node_ipv4', '') + dst_node_ipv4 = request.form.get('dst_node_ipv4', '') + src_node_ipv6 = request.form.get('src_node_ipv6', '') + dst_node_ipv6 = request.form.get('dst_node_ipv6', '') + vlan_id = request.form.get('vlan_id', '') + bandwidth = request.form.get('bandwidth_intent', '') + latency = request.form.get('latency_intent', '') + latency_version = request.form.get('delay_statistic', '') + tolerance = request.form.get('max_delay', '') + packet_reorder = request.form.get('packet_options', '') + num_pack = request.form.get('numPack', '') + pack_reorder = request.form.get('packReod', '') + num_reorder = request.form.get('numReod', '') + max_reorder = request.form.get('num_maxReod', '') + desv_reorder = request.form.get('desv_reord', '') + drop_version = request.form.get('object_options', '') + packets_drop = request.form.get('packets', '') + drops = request.form.get('drop', '') + desv_drop = request.form.get('desv_drop', '') + + json_data = __build_request(ip_version=ip_version, src_node_ip=src_node_ipv4, dst_node_ip=dst_node_ipv4, src_node_ipv6=src_node_ipv6, dst_node_ipv6=dst_node_ipv6, vlan_id=vlan_id, latency=latency, bandwidth=bandwidth, latency_version=latency_version, tolerance=tolerance, packet_reorder=packet_reorder, num_pack=num_pack, pack_reorder=pack_reorder, num_reorder=num_reorder, max_reorder=max_reorder, desv_reorder=desv_reorder, drop_version=drop_version, packets_drop=packets_drop, drops=drops, desv_drop=desv_drop) + logging.debug("Generated JSON data: %s", json_data) + if not DUMMY_MODE: + NEII_controller().nscNEII(json_data) + + session['enter'] = True + return render_template('dev.html', + json_data=json_data, + src_node_ip=src_node_ipv4 or src_node_ipv6, + dst_node_ip=dst_node_ipv4 or dst_node_ipv6, + vlan_id=vlan_id, + latency=latency, + bandwidth=bandwidth, + latency_version=latency_version, + tolerance=tolerance, + packet_reorder=packet_reorder, + num_pack=num_pack, + pack_reorder=pack_reorder, + num_reorder=num_reorder, + max_reorder=max_reorder, + desv_reorder=desv_reorder, + packets_drop=packets_drop, + drops=drops, + desv_drop=desv_drop + ) + + return render_template('dev.html', + src_node_ip=request.args.get('src_node_ip', ''), + dst_node_ip=request.args.get('dst_node_ip', ''), + vlan_id=request.args.get('vlan_id', ''), + latency=request.args.get('latency', ''), + bandwidth=request.args.get('bandwidth', ''), + latency_version=request.args.get('latency_version', ''), + tolerance=request.args.get('max_latency', ''), + packet_reorder=request.args.get('packet_reorder', ''), + num_pack=request.args.get('num_pack', ''), + pack_reorder=request.args.get('pack_reorder', ''), + num_reorder=request.args.get('num_reorder', ''), + max_reorder=request.args.get('max_reorder', ''), + desv_reorder=request.args.get('desv', ''), + packets_drop=request.args.get('packets_drop', ''), + drops=request.args.get('drop', ''), + desv_drop=request.args.get('desv_drop', ''), + json_data=None + ) + +@gui_bp.route('/webui/search', methods=['GET', 'POST']) +def search(): + + session['enter'] = False + + try: + response = requests.get(f"http://localhost:{NSC_PORT}/tfs/slice", headers={"accept": "application/json"}) + response.raise_for_status() + tfs_slices = response.json() + + response = requests.get(f"http://localhost:{NSC_PORT}/ixia/slice", headers={"accept": "application/json"}) + response.raise_for_status() + ixia_slices = response.json() + + # Combinar los slices de TFS e IXIA + slices = tfs_slices + ixia_slices + + except requests.RequestException as e: + logging.error("Error fetching slices: %s", e) + return render_template('search.html', error="No se pudieron obtener los slices.", dataframe_html="") + + # Extraer datos relevantes y construir un DataFrame + rows = [] + for item in slices: + try: + slice_service = item["intent"]["ietf-network-slice-service:network-slice-services"]["slice-service"][0] + sdp = slice_service["sdps"]["sdp"] + metric_bound = item["intent"]["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"] + + source_ip = sdp[0]["sdp-ip-address"] + dest_ip = sdp[1]["sdp-ip-address"] + vlan = sdp[0]["service-match-criteria"]["match-criterion"][0]["value"] + controller = item["controller"] + + # Construir atributos dinámicamente + attributes = [] + for metric in metric_bound: + if metric.get("metric-type", "") == "one-way-bandwidth": + metric_type = "bandwidth" + elif metric.get("metric-type", "") == "one-way-delay-maximum": + metric_type = "latency" + elif metric.get("metric-type", "") == "one-way-delay-variation-maximum": + metric_type = "tolerance" + bound = metric.get("bound") + unit = metric.get("metric-unit", "") + if bound is not None: + attributes.append(f"{metric_type}: {bound} {unit}") + + rows.append({ + "Source IP": source_ip, + "Destiny IP": dest_ip, + "Controller": controller, + "VLAN": vlan, + "attributes": attributes + }) + except Exception as e: + print(f"Error procesando slice: {e}") + + + import pandas as pd + dataframe = pd.DataFrame(rows) + + def format_attributes(attributes): + formatted_attrs = [] + for attr in attributes: + formatted_attrs.append(attr) + if formatted_attrs: + return formatted_attrs + else: + return None + + dataframe['attributes'] = dataframe['attributes'].apply([format_attributes]) + + if request.method == 'POST': + search_option = request.form.get('search_option') + search_value = request.form.get('search_value') + if search_option == 'Source IP': + results = dataframe[dataframe['Source IP'] == search_value] + elif search_option == 'Destiny IP': + results = dataframe[dataframe['Destiny IP'] == search_value] + elif search_option == 'Controller': + results = dataframe[dataframe['Controller'] == search_value] + elif search_option == 'VLAN': + results = dataframe[dataframe['VLAN'] == search_value] + else: + results = dataframe + result_html = results.to_html(classes='table table-striped') + return jsonify({'result': result_html}) + + dataframe_html = dataframe.to_html(classes='table table-striped') + return render_template('search.html', dataframe_html=dataframe_html) + +@gui_bp.route('/webui/login', methods=['GET', 'POST']) +def login(): + global enter + if request.method == 'POST': + username = request.form['username'] + password = request.form['password'] + if username == USERNAME and password == PASSWORD: + session['enter']=True + return redirect(url_for('gui.develop')) + else: + return render_template('login.html', error="Credenciales incorrectas") + + return render_template('login.html') + +@gui_bp.route('/webui/reset', methods=['POST']) +def reset(): + dataframe=__datos_json() + dataframe_html =dataframe.to_html(classes='table table-striped') + return jsonify({'result': dataframe_html}) + +@gui_bp.route('/webui/update_ips', methods=['POST']) +def update_ips(): + data = request.get_json() + tfs_ip = data.get('tfs_ip') + ixia_ip = data.get('ixia_ip') + + # Cargar datos existentes si el archivo existe + config_path = os.path.join(SRC_PATH, 'IPs.json') + if os.path.exists(config_path): + with open(config_path) as f: + ips = json.load(f) + else: + ips = {"TFS_IP": "", "IXIA_IP": ""} + + # Actualizar solo los campos recibidos + if tfs_ip: + ips['TFS_IP'] = tfs_ip + if ixia_ip: + ips['IXIA_IP'] = ixia_ip + + # Guardar de nuevo el archivo con los valores actualizados + with open(config_path, 'w') as f: + json.dump(ips, f, indent=4) + + return '', 200 \ No newline at end of file diff --git a/src/webui/static/img/MiniLogo.png b/src/webui/static/img/MiniLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..97ebca3d17c0fe8e41cbe1159ed479b26c549359 GIT binary patch literal 42223 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 literal 0 HcmV?d00001 diff --git a/src/webui/static/img/TelefonicaLogo.png b/src/webui/static/img/TelefonicaLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..36a8be0e95a62016a680722ced4b392a9dd24f1d GIT binary patch literal 48620 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 literal 0 HcmV?d00001 diff --git a/src/webui/static/img/banner.png b/src/webui/static/img/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..9fee130dcd0aca7550c5101855bf2de91fc469a8 GIT binary patch literal 59292 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 SI~W)k7(8A5T-G@yGywpS)Vn7D literal 0 HcmV?d00001 diff --git a/src/webui/templates/dev.html b/src/webui/templates/dev.html new file mode 100644 index 0000000..ef6d18d --- /dev/null +++ b/src/webui/templates/dev.html @@ -0,0 +1,459 @@ + + + + + + + Intent Generation + + + + + +

+ + + + +
+
+

Intent Generation:

+ +
+
+
+ +
+
+ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ + +
+
+ + +
+
+ +
+ + +
+ + +
+ + +
+
+ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/src/webui/templates/index.html b/src/webui/templates/index.html new file mode 100644 index 0000000..9328ac3 --- /dev/null +++ b/src/webui/templates/index.html @@ -0,0 +1,219 @@ + + + + + + Slice Creation + + + + +
+ + + + + +
+

Slice Creation

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+ + {% if error %} +
{{ error }}
+ {% endif %} + + {% if src_node_ip and dst_node_ip %} +
+

Intent Generated:

+
+

Source IP: {{ src_node_ip }}

+

Destiny IP: {{ dst_node_ip }}

+

VLAN ID: {{ vlan_id }}

+

Latency [ms]: {{ latency }}

+

Bandwidth [Mbps]: {{ bandwidth }}

+
+
+ {% endif %} +
+
+ + + + + + + diff --git a/src/webui/templates/ixia.html b/src/webui/templates/ixia.html new file mode 100644 index 0000000..47e51a1 --- /dev/null +++ b/src/webui/templates/ixia.html @@ -0,0 +1,249 @@ + + + + + + IXIA: Slice Creation + + + + +
+ + + +
+

IXIA: Slice Creation

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + (Activar) +
+ +
+ El valor debe estar entre 51 y 100. +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+ + {% if error %} +
{{ error }}
+ {% endif %} + + {% if src_node_ip and dst_node_ip %} +
+

Intent Generated:

+
+

Source IP: {{ src_node_ip }}

+

Destiny IP: {{ dst_node_ip }}

+

VLAN ID: {{ vlan_id }}

+

Latency [ms]: {{ latency }}

+

Tolerance [ms]: {{ tolerance }}

+

Bandwidth [Mbps]: {{ bandwidth }}

+

Reliability: {{ reliability or 100 }}

+
+
+ {% endif %} +
+ +
+ + + + + + + + + diff --git a/src/webui/templates/login.html b/src/webui/templates/login.html new file mode 100644 index 0000000..9ef6fa4 --- /dev/null +++ b/src/webui/templates/login.html @@ -0,0 +1,192 @@ + + + + + + Login + + + + +
+ + + + +
+ +
+
+ + + + diff --git a/src/webui/templates/search.html b/src/webui/templates/search.html new file mode 100644 index 0000000..676705b --- /dev/null +++ b/src/webui/templates/search.html @@ -0,0 +1,189 @@ + + + + + + Search Slice Data + + + + +
+ + + +

Search Slice Data

+

Fill in the fields below to search for data in the table:

+
+
+ + +
+
+ + +
+ + +
+
+
+ {{ dataframe_html|safe }} +
+
+
+ + + + + + diff --git a/src/webui/templates/welcome.html b/src/webui/templates/welcome.html new file mode 100644 index 0000000..d04082c --- /dev/null +++ b/src/webui/templates/welcome.html @@ -0,0 +1,174 @@ + + + + + + NSC WebUI + + + + + +
+ + +
+

Welcome to the NSC WebUI

+

Please, choose the controller you would like to use:

+
+ + {{ tfs_ip }} + WebUI +
+
+ + {{ ixia_ip }} + WebUI +
+
+
+ + + + \ No newline at end of file diff --git a/swagger/ixia_namespace.py b/swagger/ixia_namespace.py new file mode 100644 index 0000000..6a14ffe --- /dev/null +++ b/swagger/ixia_namespace.py @@ -0,0 +1,112 @@ +from flask import request +from flask_restx import Namespace, Resource, fields, reqparse +from src.network_slice_controller import NSController +import json +from swagger.models.create_models import create_gpp_nrm_28541_model, create_ietf_network_slice_nbi_yang_model + +ixia_ns = Namespace( + "ixia", + description="Operations related to transport network slices with IXIA NEII" +) + +# 3GPP NRM TS28.541 Data models +gpp_network_slice_request_model = create_gpp_nrm_28541_model(ixia_ns) + +# IETF draft-ietf-teas-ietf-network-slice-nbi-yang Data models + +slice_ddbb_model, slice_response_model = create_ietf_network_slice_nbi_yang_model(ixia_ns) + +upload_parser = reqparse.RequestParser() +upload_parser.add_argument('file', location='files', type='FileStorage', help="Archivo a subir") +upload_parser.add_argument('json_data', location='form', help="Datos JSON en formato string") + +# Namespace Controllers +@ixia_ns.route("/slice") +class IxiaSliceList(Resource): + @ixia_ns.doc(summary="Return all transport network slices", description="Returns all transport network slices from the slice controller.") + @ixia_ns.response(200, "Slices returned", slice_ddbb_model) + @ixia_ns.response(404, "Transport network slices not found") + @ixia_ns.response(500, "Internal server error") + def get(self): + """Retrieve all slices""" + controller = NSController(controller_type="IXIA") + return controller.get_flows() + + @ixia_ns.doc(summary="Submit a transport network slice request", description="This endpoint allows clients to submit transport network slice requests using a JSON payload.") + @ixia_ns.response(200, "Slice request successfully processed", slice_response_model) + @ixia_ns.response(400, "Invalid request format") + @ixia_ns.response(500, "Internal server error") + @ixia_ns.expect(upload_parser) + def post(self): + """Submit a new slice request with a file""" + + json_data = None + + # Try to get the JSON data from the uploaded file + uploaded_file = request.files.get('file') + if uploaded_file: + if not uploaded_file.filename.endswith('.json'): + return {"error": "Only JSON files allowed"}, 400 + + try: + json_data = json.load(uploaded_file) # Convert file to JSON + except json.JSONDecodeError: + return {"error": "JSON file not valid"}, 400 + + # If no file was uploaded, try to get the JSON data from the form + if json_data is None: + raw_json = request.form.get('json_data') + if raw_json: + try: + json_data = json.loads(raw_json) # Convert string to JSON + except json.JSONDecodeError: + return {"error": "JSON file not valid"}, 400 + + # If no JSON data was found, return an error + if json_data is None: + return {"error": "No data sent"}, 400 + + # Process the JSON data with the NSController + controller = NSController(controller_type="IXIA") + return controller.add_flow(json_data) + + @ixia_ns.doc(summary="Delete all transport network slices", description="Deletes all transport network slices from the slice controller.") + @ixia_ns.response(200, "All transport network slices deleted successfully.") + @ixia_ns.response(500, "Internal server error") + def delete(self): + """Delete all slices""" + controller = NSController(controller_type="IXIA") + return controller.delete_flows() + + +@ixia_ns.route("/slice/") +@ixia_ns.doc(params={"slice_id": "The ID of the slice to retrieve or modify"}) +class IxiaSlice(Resource): + @ixia_ns.doc(summary="Return a specific transport network slice", description="Returns specific information related to a slice by providing its id") + @ixia_ns.response(200, "Slice returned", slice_ddbb_model) + @ixia_ns.response(404, "Transport network slice not found.") + @ixia_ns.response(500, "Internal server error") + def get(self, slice_id): + """Retrieve a specific slice""" + controller = NSController(controller_type="IXIA") + return controller.get_flows(slice_id) + + @ixia_ns.doc(summary="Delete a specific transport network slice", description="Deletes a specific transport network slice from the slice controller based on the provided `slice_id`.") + @ixia_ns.response(200, "Transport network slice deleted successfully.") + @ixia_ns.response(404, "Transport network slice not found.") + @ixia_ns.response(500, "Internal server error") + def delete(self, slice_id): + """Delete a slice""" + controller = NSController(controller_type="IXIA") + return controller.delete_flows(slice_id) + + @ixia_ns.expect(slice_ddbb_model, validate=True) + @ixia_ns.doc(summary="Modify a specific transport network slice", description="Returns a specific slice that has been modified") + @ixia_ns.response(200, "Slice modified", slice_ddbb_model) + @ixia_ns.response(404, "Transport network slice not found.") + @ixia_ns.response(500, "Internal server error") + def put(self, slice_id): + """Modify a slice""" + json_data = request.get_json() + controller = NSController(controller_type="IXIA") + return controller.modify_flow(slice_id, json_data) \ No newline at end of file diff --git a/swagger/slice_namespace.py b/swagger/tfs_namespace.py similarity index 52% rename from swagger/slice_namespace.py rename to swagger/tfs_namespace.py index 0f629f9..c9c3e07 100644 --- a/swagger/slice_namespace.py +++ b/swagger/tfs_namespace.py @@ -20,39 +20,39 @@ from src.network_slice_controller import NSController import json from swagger.models.create_models import create_gpp_nrm_28541_model, create_ietf_network_slice_nbi_yang_model -slice_ns = Namespace( - "slice", - description="Operations related to transport network slices" +tfs_ns = Namespace( + "tfs", + description="Operations related to transport network slices with TeraflowSDN (TFS) controller" ) # 3GPP NRM TS28.541 Data models -gpp_network_slice_request_model = create_gpp_nrm_28541_model(slice_ns) +gpp_network_slice_request_model = create_gpp_nrm_28541_model(tfs_ns) # IETF draft-ietf-teas-ietf-network-slice-nbi-yang Data models -slice_ddbb_model, slice_response_model = create_ietf_network_slice_nbi_yang_model(slice_ns) +slice_ddbb_model, slice_response_model = create_ietf_network_slice_nbi_yang_model(tfs_ns) upload_parser = reqparse.RequestParser() upload_parser.add_argument('file', location='files', type='FileStorage', help="Archivo a subir") upload_parser.add_argument('json_data', location='form', help="Datos JSON en formato string") # Namespace Controllers -@slice_ns.route("/") -class SliceList(Resource): - @slice_ns.doc(summary="Return all transport network slices", description="Returns all transport network slices from the slice controller.") - @slice_ns.response(200, "Slices returned", slice_ddbb_model) - @slice_ns.response(404, "Transport network slices not found") - @slice_ns.response(500, "Internal server error") +@tfs_ns.route("/slice") +class TfsSliceList(Resource): + @tfs_ns.doc(summary="Return all transport network slices", description="Returns all transport network slices from the slice controller.") + @tfs_ns.response(200, "Slices returned", slice_ddbb_model) + @tfs_ns.response(404, "Transport network slices not found") + @tfs_ns.response(500, "Internal server error") def get(self): """Retrieve all slices""" - controller = NSController() + controller = NSController(controller_type="TFS") return controller.get_flows() - @slice_ns.doc(summary="Submit a transport network slice request", description="This endpoint allows clients to submit transport network slice requests using a JSON payload.") - @slice_ns.response(200, "Slice request successfully processed", slice_response_model) - @slice_ns.response(400, "Invalid request format") - @slice_ns.response(500, "Internal server error") - @slice_ns.expect(upload_parser) + @tfs_ns.doc(summary="Submit a transport network slice request", description="This endpoint allows clients to submit transport network slice requests using a JSON payload.") + @tfs_ns.response(200, "Slice request successfully processed", slice_response_model) + @tfs_ns.response(400, "Invalid request format") + @tfs_ns.response(500, "Internal server error") + @tfs_ns.expect(upload_parser) def post(self): """Submit a new slice request with a file""" @@ -83,46 +83,48 @@ class SliceList(Resource): return {"error": "No data sent"}, 400 # Process the JSON data with the NSController - controller = NSController() + controller = NSController(controller_type="TFS") return controller.add_flow(json_data) - @slice_ns.doc(summary="Delete all transport network slices", description="Deletes all transport network slices from the slice controller.") - @slice_ns.response(200, "All transport network slices deleted successfully.") - @slice_ns.response(500, "Internal server error") + @tfs_ns.doc(summary="Delete all transport network slices", description="Deletes all transport network slices from the slice controller.") + @tfs_ns.response(200, "All transport network slices deleted successfully.") + @tfs_ns.response(500, "Internal server error") def delete(self): """Delete all slices""" - controller = NSController() + controller = NSController(controller_type="TFS") return controller.delete_flows() -@slice_ns.route("/") -@slice_ns.doc(params={"slice_id": "The ID of the slice to retrieve or modify"}) -class Slice(Resource): - @slice_ns.doc(summary="Return a specific transport network slice", description="Returns specific information related to a slice by providing its id") - @slice_ns.response(200, "Slice returned", slice_ddbb_model) - @slice_ns.response(404, "Transport network slice not found.") - @slice_ns.response(500, "Internal server error") +@tfs_ns.route("/slice/") +@tfs_ns.doc(params={"slice_id": "The ID of the slice to retrieve or modify"}) +class TfsSlice(Resource): + @tfs_ns.doc(summary="Return a specific transport network slice", description="Returns specific information related to a slice by providing its id") + @tfs_ns.response(200, "Slice returned", slice_ddbb_model) + @tfs_ns.response(404, "Transport network slice not found.") + @tfs_ns.response(500, "Internal server error") def get(self, slice_id): """Retrieve a specific slice""" - controller = NSController() + controller = NSController(controller_type="TFS") return controller.get_flows(slice_id) - @slice_ns.doc(summary="Delete a specific transport network slice", description="Deletes a specific transport network slice from the slice controller based on the provided `slice_id`.") - @slice_ns.response(200, "Transport network slice deleted successfully.") - @slice_ns.response(404, "Transport network slice not found.") - @slice_ns.response(500, "Internal server error") + @tfs_ns.doc(summary="Delete a specific transport network slice", description="Deletes a specific transport network slice from the slice controller based on the provided `slice_id`.") + @tfs_ns.response(200, "Transport network slice deleted successfully.") + @tfs_ns.response(404, "Transport network slice not found.") + @tfs_ns.response(500, "Internal server error") def delete(self, slice_id): """Delete a slice""" - controller = NSController() + controller = NSController(controller_type="TFS") return controller.delete_flows(slice_id) - @slice_ns.expect(slice_ddbb_model, validate=True) - @slice_ns.doc(summary="Modify a specific transport network slice", description="Returns a specific slice that has been modified") - @slice_ns.response(200, "Slice modified", slice_ddbb_model) - @slice_ns.response(404, "Transport network slice not found.") - @slice_ns.response(500, "Internal server error") + @tfs_ns.expect(slice_ddbb_model, validate=True) + @tfs_ns.doc(summary="Modify a specific transport network slice", description="Returns a specific slice that has been modified") + @tfs_ns.response(200, "Slice modified", slice_ddbb_model) + @tfs_ns.response(404, "Transport network slice not found.") + @tfs_ns.response(500, "Internal server error") def put(self, slice_id): """Modify a slice""" json_data = request.get_json() - controller = NSController() + controller = NSController(controller_type="TFS") return controller.modify_flow(slice_id, json_data) + + -- GitLab From ed7cc17f7440e5892e2433a1150770346757467d Mon Sep 17 00:00:00 2001 From: velazquez Date: Thu, 31 Jul 2025 13:01:21 +0200 Subject: [PATCH 07/14] -Add energy planner -Add new flags to activate planner and NRPs -Update copyright header -Add new flags to dump templates for debugging --- src/Constants.py | 17 +- src/network_slice_controller.py | 193 +- src/planner/energy_ddbb.json | 156 + src/planner/ext_topo_ddbb.json | 195 + src/planner/planner.py | 286 + src/planner/topo_ddbb.json | 43 + src/realizers/ixia/NEII_V4.py | 17 +- src/realizers/ixia/automatizacion_ne2v4.py | 17 +- src/slice_ddbb.json | 14624 ++++++++++++++++++- src/templates/ietf_template.json | 165 + src/templates/ietf_template_empty.json | 4 +- src/templates/ietf_template_example.json | 65 +- src/templates/nbi_template.json | 163 + src/templates/realizer_template.json | 14 + src/webui/gui.py | 17 +- src/webui/templates/dev.html | 15 + src/webui/templates/index.html | 15 + src/webui/templates/ixia.html | 15 + src/webui/templates/login.html | 15 + src/webui/templates/search.html | 15 + src/webui/templates/welcome.html | 15 + 21 files changed, 15894 insertions(+), 172 deletions(-) create mode 100644 src/planner/energy_ddbb.json create mode 100644 src/planner/ext_topo_ddbb.json create mode 100644 src/planner/planner.py create mode 100644 src/planner/topo_ddbb.json create mode 100644 src/templates/ietf_template.json create mode 100644 src/templates/nbi_template.json create mode 100644 src/templates/realizer_template.json diff --git a/src/Constants.py b/src/Constants.py index c88b5b9..15babf4 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -17,7 +17,7 @@ import logging, os, json # Default logging level -DEFAULT_LOGGING_LEVEL = logging.INFO +DEFAULT_LOGGING_LEVEL = logging.DEBUG # Default port for NSC deployment NSC_PORT = 8081 @@ -31,6 +31,20 @@ with open(os.path.join(SRC_PATH, 'IPs.json')) as f: # Create the path to the desired file relative to the current file TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") +# Dump templates +DUMP_TEMPLATES = True + +# Mapper + +# Flag to determine if the NSC performs NRPs +NRP_ENABLED = False +# Planner Flags +PLANNER_ENABLED = True +# Flag to determine if external PCE is used +PCE_EXTERNAL = False + +# Realizer + # Controller Flags # If True, config is not sent to controllers DUMMY_MODE = True @@ -42,5 +56,6 @@ TFS_L2VPN_SUPPORT = False IXIA_IP = ips.get('IXIA_IP') # WebUI + # Flag to deploy the WebUI WEBUI_DEPLOY = True \ No newline at end of file diff --git a/src/network_slice_controller.py b/src/network_slice_controller.py index d280ebb..fd7dfcc 100644 --- a/src/network_slice_controller.py +++ b/src/network_slice_controller.py @@ -17,8 +17,9 @@ import json, time, os, logging, uuid, traceback, sys from datetime import datetime from src.helpers import tfs_connector, cisco_connector -from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_IP, TFS_L2VPN_SUPPORT, IXIA_IP, SRC_PATH, TEMPLATES_PATH, DUMMY_MODE +from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_IP, TFS_L2VPN_SUPPORT, IXIA_IP, SRC_PATH, TEMPLATES_PATH, DUMMY_MODE, DUMP_TEMPLATES, PLANNER_ENABLED, NRP_ENABLED from src.realizers.ixia.NEII_V4 import NEII_controller +from src.planner.planner import Planner # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -262,10 +263,20 @@ class NSController: # Reset requests and load IETF template self.__load_template(1, os.path.join(TEMPLATES_PATH, "ietf_template_empty.json")) requests = {"services":[]} + + # Store the received template for debugging + if DUMP_TEMPLATES: + with open(os.path.join(TEMPLATES_PATH, "nbi_template.json"), "w") as file: + file.write(json.dumps(intent_json,indent=2)) # Process intent (translate if 3GPP) ietf_intents = self.__nbi_processor(intent_json) + # Store the generated template for debugging + if DUMP_TEMPLATES: + with open(os.path.join(TEMPLATES_PATH, "ietf_template.json"), "w") as file: + file.write(json.dumps(ietf_intents,indent=2)) + if ietf_intents: for intent in ietf_intents: # Extract and store slice request details @@ -278,9 +289,11 @@ class NSController: requests["services"].append(tfs_request) else: return self.__send_response(False, code=404, message="No intents found") - - # Generated service - logging.debug(json.dumps(requests, indent=2)) + + # Store the generated template for debugging + if DUMP_TEMPLATES: + with open(os.path.join(TEMPLATES_PATH, "realizer_template.json"), "w") as archivo: + archivo.write(json.dumps(requests,indent=2)) # Optional: Upload template to Teraflow if not DUMMY_MODE: @@ -330,7 +343,6 @@ class NSController: # Detect the input JSON format (3GPP or IETF) format = self.__detect_format(intent_json) ietf_intents = [] - logging.debug("--------NEW REQUEST--------") # TODO Needs to be generalized to support different names of slicesubnets # Process different input formats @@ -343,8 +355,6 @@ class NSController: # If already in IETF format, add directly logging.info(f"IETF intent received") ietf_intents.append(intent_json) - with open(os.path.join(TEMPLATES_PATH, "ietf_template_example.json"), "w") as archivo: - archivo.write(json.dumps(ietf_intents,indent=2)) else: # Handle unrecognized format logging.error(f"JSON request format not recognized") @@ -369,36 +379,42 @@ class NSController: Raises: Exception: If no suitable NRP is found and slice creation fails. """ - # Retrieve NRP view - self.__realizer(None, True, "READ") - - # Extract Service Level Objectives (SLOs) from the intent - slos = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"] - - if slos: - # Find candidate NRPs that can meet the SLO requirements - candidates = [ - (nrp, self.__slo_viability(slos, nrp)[1]) - for nrp in self.__nrp_view - if self.__slo_viability(slos, nrp)[0] and nrp["available"] - ] - logging.debug(f"Candidates: {candidates}") - - # Select the best NRP based on candidates - best_nrp = max(candidates, key=lambda x: x[1])[0] if candidates else None - logging.debug(f"Best NRP: {best_nrp}") - - if best_nrp: - best_nrp["slices"].append(ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"]) - # Update NRP view - self.__realizer(ietf_intent, True, "UPDATE") - # TODO Here we should put how the slice is attached to an already created nrp - else: - # Request the controller to create a new NRP that meets the SLOs - answer = self.__realizer(ietf_intent, True, "CREATE", best_nrp) - if not answer: - raise Exception("Slice rejected due to lack of NRPs") - # TODO Here we should put how the slice is attached to the new nrp + if NRP_ENABLED: + # Retrieve NRP view + self.__realizer(None, True, "READ") + + # Extract Service Level Objectives (SLOs) from the intent + slos = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"] + + if slos: + # Find candidate NRPs that can meet the SLO requirements + candidates = [ + (nrp, self.__slo_viability(slos, nrp)[1]) + for nrp in self.__nrp_view + if self.__slo_viability(slos, nrp)[0] and nrp["available"] + ] + logging.debug(f"Candidates: {candidates}") + + # Select the best NRP based on candidates + best_nrp = max(candidates, key=lambda x: x[1])[0] if candidates else None + logging.debug(f"Best NRP: {best_nrp}") + + if best_nrp: + best_nrp["slices"].append(ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"]) + # Update NRP view + self.__realizer(ietf_intent, True, "UPDATE") + # TODO Here we should put how the slice is attached to an already created nrp + else: + # Request the controller to create a new NRP that meets the SLOs + answer = self.__realizer(ietf_intent, True, "CREATE", best_nrp) + if not answer: + raise Exception("Slice rejected due to lack of NRPs") + # TODO Here we should put how the slice is attached to the new nrp + + if PLANNER_ENABLED: + optimal_path = Planner().planner(ietf_intent) + + logging.info(f"Optimal path: {optimal_path}") def __realizer(self, ietf_intent, need_nrp=False, order=None, nrp=None): """ @@ -476,7 +492,6 @@ class NSController: "setup_time": self.setup_time } # Add slice details to the response - logging.info(self.answer) for subnet in self.answer: slice_info = { "id": subnet, @@ -672,10 +687,6 @@ class NSController: ietf_i["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["target-connection-group-id"] = f"{ep_transport_objects[0].split(' ', 1)[1]}_{ep_transport_objects[1].split(' ', 1)[1]}" ietf_i["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["service-match-criteria"]["match-criterion"][0]["target-connection-group-id"] = f"{ep_transport_objects[0].split(' ', 1)[1]}_{ep_transport_objects[1].split(' ', 1)[1]}" - # Log translated intent for debugging - logging.debug(json.dumps(ietf_i,indent=2)) - with open(os.path.join(TEMPLATES_PATH, "ietf_template_example.json"), "w") as archivo: - archivo.write(json.dumps(ietf_i,indent=2)) return ietf_i ### Mapper functionalities @@ -723,102 +734,6 @@ class NSController: score = sum(flexibility_scores) / len(flexibility_scores) if flexibility_scores else 0 return True, score # Si pasó todas las verificaciones, la NRP es viable - def __planner(self, intent, nrp_view): - """ - TODO - Request slice viability from the Planner module. - - This method prepares and sends a viability request for network slice creation, - detaching the implementation from the main core thread. - - Args: - intent (dict): Network slice intent - nrp_view (list): Current Network Resource Pool view - - Returns: - tuple: A tuple containing: - - Viability status (str): "Good" or other status - - Reason (str): Explanation of viability - - Notes: - - Calculates source and destination service delivery points (SDP) - - Extracts QoS requirements - - Performs viability check through internal methods - """ - - #Version 1 - matriz = {} - matriz["payloads"] = [] - #for i in intent: - # SI ya existe, suma, si no existe, lo crea - origen = self.__calculate_sdp(intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["sdp-ip-address"]) - destino = self.__calculate_sdp(intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["sdp-ip-address"]) - #qos_req = i["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["slo-sle-policy"]["slo-sle-template"] - qos_req = intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][0]["bound"] - payload = { - "Source": origen, - "Destination": destino, - "QoS requirements": qos_req - } - matriz["payloads"].append(payload) - m_res = [] - m_qos = [] - for p in matriz["payloads"]: - res = p - m_res.append(res) - m_qos.append(p["QoS requirements"]) - m_res, m_qos = self.__viability(m_res,intent, m_qos) - reason="Viable" - viability = "Good" - return viability, reason - - def __viability(self, matrix, intent, qos): - """ - TODO - """ - aux = {} - aux["good"] = [] - aux["bad"] = [] - l_qos = [] - for i in range(len(intent)): - # if matrix[i]['success'] == True: - aux["good"].append(matrix[i]) - l_qos.append(qos[i]) - # else: - # aux["bad"].append(intent[i]) - return aux, l_qos - - def __calculate_sdp(self, pip): - ''' - TODO - Imput: - Output: - Work: Identifies the network entpoint from the IP-sdp received. - Version 0 will be done directly with next hop. - Version 1 will translate directly from the public IP of each node to their Loopback address. - ''' - nid = 0 - with open(os.path.join(TEMPLATES_PATH, "ips.json"), 'r') as source: - jason = source.read() - jason = jason.replace('\t', '').replace('\n', '').replace("'", '"').strip() - nodos = json.loads(str(jason)) - #template = json.loads(str(jason)) - # Once we have the template, we search for the one charged. - for nodo in nodos["public-prefixes"]: - if pip == nodo["prefix"]: - #nid = nodo["node-id"] - nid = nodo["node-name"] - for nodo in nodos["CU"]: - if pip == nodo["prefix"]: - #nid = nodo["node-id"] - nid = nodo["node-name"] - for nodo in nodos["DU"]: - if pip == nodo["prefix"]: - #nid = nodo["node-id"] - nid = nodo["node-name"] - return nid - - ### Realizer functionalities. def __nrp(self, request, nrp): """ @@ -1126,8 +1041,6 @@ class NSController: logging.info(f"L3VPN Intent realized\n") self.answer[self.subnet]["VLAN"] = vlan_value - with open(os.path.join(TEMPLATES_PATH, "L3-VPN_template_example.json"), "w") as archivo: - archivo.write(json.dumps(tfs_request,indent=2)) return tfs_request def __ixia(self, ietf_intent): diff --git a/src/planner/energy_ddbb.json b/src/planner/energy_ddbb.json new file mode 100644 index 0000000..7826de6 --- /dev/null +++ b/src/planner/energy_ddbb.json @@ -0,0 +1,156 @@ +[ + { + "name": "A", + "typical-power": 3500, + "maximum-traffic": 100.0, + "max-power": 150.0, + "efficiency": 0.9, + "nominal-power": 130.0, + "carbon-emissions": 130.0, + "renewable-energy-usage": 0.7, + "power-supply": [ + {"name": "PSU-1", "type": "AC", "capacity": 200.0, "typical-power": 100.0, "nominal-power": 110.0} + ], + "boards": [ + {"name": "Board-1", "type": "Linecard", "capacity": 40.0, "typical-power": 20.0, "nominal-power": 25.0} + ], + "components": [ + {"name": "CPU", "type": "Control", "capacity": 10.0, "typical-power": 5.0, "nominal-power": 6.0} + ], + "transceivers": [ + {"name": "XFP1", "type": "10G", "capacity": 10.0, "typical-power": 2.0, "nominal-power": 2.5} + ] + }, + { + "name": "B", + "typical-power": 6000, + "maximum-traffic": 120.0, + "max-power": 180.0, + "efficiency": 1, + "nominal-power": 160.0, + "carbon-emissions": 180.0, + "renewable-energy-usage": 0.6, + "power-supply": [ + {"name": "PSU-1", "type": "DC", "capacity": 250.0, "typical-power": 120.0, "nominal-power": 130.0} + ], + "boards": [ + {"name": "Board-2", "type": "Switching", "capacity": 60.0, "typical-power": 30.0, "nominal-power": 35.0} + ], + "components": [ + {"name": "ASIC", "type": "Forwarding", "capacity": 15.0, "typical-power": 7.0, "nominal-power": 8.0} + ], + "transceivers": [ + {"name": "SFP1", "type": "1G", "capacity": 1.0, "typical-power": 1.0, "nominal-power": 1.2} + ] + }, + { + "name": "C", + "typical-power": 3200, + "maximum-traffic": 150.0, + "max-power": 250.0, + "efficiency": 1.2, + "nominal-power": 210.0, + "carbon-emissions": 160.0, + "renewable-energy-usage": 0.5, + "power-supply": [ + {"name": "PSU-2", "type": "AC", "capacity": 300.0, "typical-power": 150.0, "nominal-power": 160.0} + ], + "boards": [ + {"name": "Board-3", "type": "Routing", "capacity": 80.0, "typical-power": 40.0, "nominal-power": 45.0} + ], + "components": [ + {"name": "FPGA", "type": "Processing", "capacity": 20.0, "typical-power": 10.0, "nominal-power": 12.0} + ], + "transceivers": [ + {"name": "QSFP1", "type": "40G", "capacity": 40.0, "typical-power": 4.0, "nominal-power": 5.0} + ] + }, + { + "name": "D", + "typical-power": 6000, + "maximum-traffic": 200.0, + "max-power": 300.0, + "efficiency": 0.9, + "nominal-power": 260.0, + "carbon-emissions": 100.0, + "renewable-energy-usage": 0.5, + "power-supply": [ + {"name": "PSU-3", "type": "DC", "capacity": 350.0, "typical-power": 180.0, "nominal-power": 190.0} + ], + "boards": [ + {"name": "Board-4", "type": "Access", "capacity": 100.0, "typical-power": 50.0, "nominal-power": 55.0} + ], + "components": [ + {"name": "GPU", "type": "Accelerator", "capacity": 25.0, "typical-power": 12.0, "nominal-power": 14.0} + ], + "transceivers": [ + {"name": "CFP1", "type": "100G", "capacity": 100.0, "typical-power": 8.0, "nominal-power": 10.0} + ] + }, + { + "name": "E", + "typical-power": 4500, + "maximum-traffic": 250.0, + "max-power": 350.0, + "efficiency": 1.4, + "nominal-power": 310.0, + "carbon-emissions": 180, + "renewable-energy-usage": 0.6, + "power-supply": [ + {"name": "PSU-4", "type": "AC", "capacity": 400.0, "typical-power": 200.0, "nominal-power": 210.0} + ], + "boards": [ + {"name": "Board-5", "type": "Core", "capacity": 120.0, "typical-power": 60.0, "nominal-power": 65.0} + ], + "components": [ + {"name": "TPU", "type": "Neural Processing", "capacity": 30.0, "typical-power": 15.0, "nominal-power": 18.0} + ], + "transceivers": [ + {"name": "OSFP1", "type": "400G", "capacity": 400.0, "typical-power": 12.0, "nominal-power": 15.0} + ] + }, + { + "name": "F", + "typical-power": 3000, + "maximum-traffic": 300.0, + "max-power": 400.0, + "efficiency": 1.3, + "nominal-power": 360.0, + "carbon-emissions": 140, + "renewable-energy-usage": 0.6, + "power-supply": [ + {"name": "PSU-5", "type": "DC", "capacity": 450.0, "typical-power": 220.0, "nominal-power": 230.0} + ], + "boards": [ + {"name": "Board-6", "type": "Edge", "capacity": 150.0, "typical-power": 75.0, "nominal-power": 80.0} + ], + "components": [ + {"name": "ASIC2", "type": "Edge Processing", "capacity": 40.0, "typical-power": 20.0, "nominal-power": 22.0} + ], + "transceivers": [ + {"name": "QSFP-DD1", "type": "800G", "capacity": 800.0, "typical-power": 16.0, "nominal-power": 20.0} + ] + }, + { + "name": "G", + "typical-power": 3100, + "maximum-traffic": 350.0, + "max-power": 450.0, + "efficiency": 1.1, + "nominal-power": 410.0, + "carbon-emissions": 105.0, + "renewable-energy-usage": 0.6, + "power-supply": [ + {"name": "PSU-6", "type": "AC", "capacity": 500.0, "typical-power": 250.0, "nominal-power": 260.0} + ], + "boards": [ + {"name": "Board-7", "type": "Virtualization", "capacity": 180.0, "typical-power": 90.0, "nominal-power": 95.0} + ], + "components": [ + {"name": "FPGA2", "type": "Reconfigurable Processing", "capacity": 50.0, "typical-power": 25.0, "nominal-power": 28.0} + ], + "transceivers": [ + {"name": "CFP2", "type": "1.6T", "capacity": 1600.0, "typical-power": 20.0, "nominal-power": 25.0} + ] + } +] \ No newline at end of file diff --git a/src/planner/ext_topo_ddbb.json b/src/planner/ext_topo_ddbb.json new file mode 100644 index 0000000..72dc93d --- /dev/null +++ b/src/planner/ext_topo_ddbb.json @@ -0,0 +1,195 @@ +{ +"nodes": [ + { + "nodeId": 1, + "name": "A", + "type": "SITE", + "footprint": { "cpu": 2, "memory": 1024, "disk": 5000 }, + "vulnerability": 1 + }, + { + "nodeId": 2, + "name": "B", + "type": "SITE", + "footprint": { "cpu": 1, "memory": 512, "disk": 3000 }, + "vulnerability": 2 + }, + { + "nodeId": 3, + "name": "C", + "type": "SITE", + "footprint": { "cpu": 2, "memory": 2048, "disk": 6000 }, + "vulnerability": 3 + }, + { + "nodeId": 4, + "name": "D", + "type": "SITE", + "footprint": { "cpu": 1, "memory": 1024, "disk": 4000 }, + "vulnerability": 1 + }, + { + "nodeId": 5, + "name": "E", + "type": "SITE", + "footprint": { "cpu": 2, "memory": 1024, "disk": 5000 }, + "vulnerability": 2 + }, + { + "nodeId": 6, + "name": "F", + "type": "SITE", + "footprint": { "cpu": 1, "memory": 512, "disk": 3000 }, + "vulnerability": 2 + }, + { + "nodeId": 7, + "name": "G", + "type": "SITE", + "footprint": { "cpu": 2, "memory": 1024, "disk": 7000 }, + "vulnerability": 3 + } +], +"links":[ + { + "linkId": "A-E", + "sourceNodeId": "1", + "destNodeId": "5", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 5 }] + }, + { + "linkId": "E-A", + "sourceNodeId": "5", + "destNodeId": "1", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 5 }] + }, + { + "linkId": "A-D", + "sourceNodeId": "1", + "destNodeId": "4", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 4 }] + }, + { + "linkId": "D-A", + "sourceNodeId": "4", + "destNodeId": "1", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 4 }] + }, + { + "linkId": "A-C", + "sourceNodeId": "1", + "destNodeId": "3", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 3 }] + }, + { + "linkId": "C-A", + "sourceNodeId": "3", + "destNodeId": "1", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 3 }] + }, + { + "linkId": "B-C", + "sourceNodeId": "2", + "destNodeId": "3", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 6 }] + }, + { + "linkId": "C-B", + "sourceNodeId": "3", + "destNodeId": "2", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 6 }] + }, + { + "linkId": "B-D", + "sourceNodeId": "2", + "destNodeId": "4", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 7 }] + }, + { + "linkId": "D-B", + "sourceNodeId": "4", + "destNodeId": "2", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 7 }] + }, + { + "linkId": "B-F", + "sourceNodeId": "2", + "destNodeId": "6", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 5 }] + }, + { + "linkId": "F-B", + "sourceNodeId": "6", + "destNodeId": "2", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 5 }] + }, + { + "linkId": "D-E", + "sourceNodeId": "4", + "destNodeId": "5", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 2 }] + }, + { + "linkId": "E-D", + "sourceNodeId": "5", + "destNodeId": "4", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 2 }] + }, + { + "linkId": "D-F", + "sourceNodeId": "4", + "destNodeId": "6", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 6 }] + }, + { + "linkId": "F-D", + "sourceNodeId": "6", + "destNodeId": "4", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 6 }] + }, + { + "linkId": "E-G", + "sourceNodeId": "5", + "destNodeId": "7", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 3 }] + }, + { + "linkId": "G-E", + "sourceNodeId": "7", + "destNodeId": "5", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 3 }] + }, + { + "linkId": "F-G", + "sourceNodeId": "6", + "destNodeId": "7", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 4 }] + }, + { + "linkId": "G-F", + "sourceNodeId": "7", + "destNodeId": "6", + "bandwidth": 1000000000, + "metrics": [{ "metric": "DELAY", "value": 4 }] + } +] +} \ No newline at end of file diff --git a/src/planner/planner.py b/src/planner/planner.py new file mode 100644 index 0000000..b5fb1ba --- /dev/null +++ b/src/planner/planner.py @@ -0,0 +1,286 @@ +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 file is an original contribution from Telefonica Innovación Digital S.L. + +import logging, random, os, json, heapq +from src.Constants import SRC_PATH, PCE_EXTERNAL, DEFAULT_LOGGING_LEVEL + +# Configure logging to provide clear and informative log messages +logging.basicConfig( + level=DEFAULT_LOGGING_LEVEL, + format='%(levelname)s - %(message)s') + +class Planner: + """ + Planner class to compute the optimal path for a network slice based on energy consumption and topology. + """ + + def planner(self, intent): + """ + Plan the optimal path for a network slice based on energy consumption and topology. + """ + energy_metrics = self.__retrieve_energy() + topology = self.__retrieve_topology() + source = intent.get("ietf-network-slice-service:network-slice-services", {}).get("slice-service", [])[0].get("sdps", {}).get("sdp", [])[0].get("id") or "A" + destination = intent.get("ietf-network-slice-service:network-slice-services", {}).get("slice-service", [])[0].get("sdps", {}).get("sdp", [])[1].get("id") or "B" + optimal_path = [] + # If using an external PCE + if PCE_EXTERNAL: + logging.info("Using external PCE for path planning") + def build_slice_input(node_source, node_destination): + return { + "clientName": "demo-client", + "requestId": random.randint(1000, 9999), + "sites": [node_source["nodeId"], node_destination["nodeId"]], + "graph": { + "nodes": [ + { + "nodeId": node_source["nodeId"], + "name": node_source["name"], + "footprint": node_source["footprint"], + "sticky": [node_source["nodeId"]] + }, + { + "nodeId": node_destination["nodeId"], + "name": node_destination["name"], + "footprint": node_destination["footprint"], + "sticky": [node_destination["nodeId"]] + } + ], + "links": [ + { + "fromNodeId": node_source["nodeId"], + "toNodeId": node_destination["nodeId"], + "bandwidth": 1000000000, + "metrics": [ + { + "metric": "DELAY", + "value": 10, + "bound": True, + "required": True + } + ] + } + ], + "constraints": { + "maxVulnerability": 3, + "maxDeployedServices": 10, + "metricLimits": [] + } + } + } + source = next((node for node in topology["nodes"] if node["name"] == source), None) + destination = next((node for node in topology["nodes"] if node["name"] == destination), None) + slice_input = build_slice_input(source, destination) + + # POST /sss/v1/slice/compute + def simulate_slice_output(input_data): + return { + "input": input_data, + "slice": { + "nodes": [ + {"site": 1, "service": 1}, + {"site": 2, "service": 2} + ], + "links": [ + { + "fromNodeId": 1, + "toNodeId": 2, + "lspId": 500, + "path": { + "ingressNodeId": 1, + "egressNodeId": 2, + "hops": [ + {"nodeId": 3, "linkId": "A-C", "portId": 1}, + {"nodeId": 2, "linkId": "C-B", "portId": 2} + ] + } + } + ], + "metric": {"value": 9} + }, + "error": None + } + slice_output = simulate_slice_output(slice_input) + # Mostrar resultado + optimal_path.append(source["name"]) + for link in slice_output["slice"]["links"]: + for hop in link["path"]["hops"]: + optimal_path.append(next((node for node in topology["nodes"] if node["nodeId"] == hop['nodeId']), None)["name"]) + + else: + logging.info("Using internal PCE for path planning") + ietf_dlos = intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"] + logging.info(ietf_dlos), + # Solo asigna los DLOS que existan, el resto a None + dlos = { + "EC": next((item.get("bound") for item in ietf_dlos if item.get("metric-type") == "energy_consumption"), None), + "CE": next((item.get("bound") for item in ietf_dlos if item.get("metric-type") == "carbon_emission"), None), + "EE": next((item.get("bound") for item in ietf_dlos if item.get("metric-type") == "energy_efficiency"), None), + "URE": next((item.get("bound") for item in ietf_dlos if item.get("metric-type") == "renewable_energy_usage"), None) + } + logging.debug(f"Planning optimal path from {source} to {destination} with DLOS: {dlos}") + optimal_path = self.__calculate_optimal_path(topology, energy_metrics, source, destination, dlos) + + if not optimal_path: + logging.error("No valid path found") + raise Exception("No valid energy path found") + + return optimal_path + + def __retrieve_energy(self): + # TODO : Implement the logic to retrieve energy consumption data from controller + # Taking it from static file + with open(os.path.join(SRC_PATH, "planner/energy_ddbb.json"), "r") as archivo: + energy_metrics = json.load(archivo) + return energy_metrics + + def __retrieve_topology(self): + if PCE_EXTERNAL: + # TODO : Implement the logic to retrieve topology data from external PCE + # GET /sss/v1/topology/node and /sss/v1/topology/link + with open(os.path.join(SRC_PATH, "planner/ext_topo_ddbb.json"), "r") as archivo: + topology = json.load(archivo) + else: + # TODO : Implement the logic to retrieve topology data from controller + # Taking it from static file + with open(os.path.join(SRC_PATH, "planner/topo_ddbb.json"), "r") as archivo: + topology = json.load(archivo) + return topology + + + + def __calculate_optimal_path(self, topology, energy_metrics, source, destination, dlos): + logging.debug("Starting optimal path calculation...") + + # Create a dictionary with the weights of each node + node_data_map = {} + for node_data in energy_metrics: + node_id = node_data["name"] + ec = node_data["typical-power"] + ce = node_data["carbon-emissions"] + ee = node_data["efficiency"] + ure = node_data["renewable-energy-usage"] + + total_power_supply = sum(ps["typical-power"] for ps in node_data["power-supply"]) + total_power_boards = sum(b["typical-power"] for b in node_data["boards"]) + total_power_components = sum(c["typical-power"] for c in node_data["components"]) + total_power_transceivers = sum(t["typical-power"] for t in node_data["transceivers"]) + + logging.debug(f"Node {node_id}: EC={ec}, CE={ce}, EE={ee}, URE={ure}") + logging.debug(f"Node {node_id}: PS={total_power_supply}, BO={total_power_boards}, CO={total_power_components}, TR={total_power_transceivers}") + + weight = self.__compute_node_weight(ec, ce, ee, ure, + total_power_supply, + total_power_boards, + total_power_components, + total_power_transceivers) + logging.debug(f"Weight for node {node_id}: {weight}") + + node_data_map[node_id] = { + "weight": weight, + "ec": ec, + "ce": ce, + "ee": ee, + "ure": ure + } + + # Create a graph representation of the topology + graph = {} + for node in topology["ietf-network:networks"]["network"][0]["node"]: + graph[node["node-id"]] = [] + for link in topology["ietf-network:networks"]["network"][0]["link"]: + src = link["source"]["source-node"] + dst = link["destination"]["dest-node"] + graph[src].append((dst, node_data_map[dst]["weight"])) + logging.debug(f"Added link: {src} -> {dst} with weight {node_data_map[dst]['weight']}") + + # Dijkstra's algorithm with restrictions + queue = [(0, source, [], 0, 0, 0, 1)] # (accumulated cost, current node, path, sum_ec, sum_ce, sum_ee, min_ure) + visited = set() + + logging.debug(f"Starting search from {source} to {destination} with restrictions: {dlos}") + + + while queue: + cost, node, path, sum_ec, sum_ce, sum_ee, min_ure = heapq.heappop(queue) + logging.debug(f"Exploring node {node} with cost {cost} and path {path + [node]}") + + if node in visited: + logging.debug(f"Node {node} already visited, skipped.") + continue + visited.add(node) + path = path + [node] + + node_metrics = node_data_map[node] + sum_ec += node_metrics["ec"] + sum_ce += node_metrics["ce"] + sum_ee += node_metrics["ee"] + min_ure = min(min_ure, node_metrics["ure"]) if path[:-1] else node_metrics["ure"] + + logging.debug(f"Accumulated -> EC: {sum_ec}, CE: {sum_ce}, EE: {sum_ee}, URE min: {min_ure}") + + if dlos["EC"] is not None and sum_ec > dlos["EC"]: + logging.debug(f"Discarded path {path} for exceeding EC ({sum_ec} > {dlos['EC']})") + continue + if dlos["CE"] is not None and sum_ce > dlos["CE"]: + logging.debug(f"Discarded path {path} for exceeding CE ({sum_ce} > {dlos['CE']})") + continue + if dlos["EE"] is not None and sum_ee > dlos["EE"]: + logging.debug(f"Discarded path {path} for exceeding EE ({sum_ee} > {dlos['EE']})") + continue + if dlos["URE"] is not None and min_ure < dlos["URE"]: + logging.debug(f"Discarded path {path} for not reaching minimum URE ({min_ure} < {dlos['URE']})") + continue + + if node == destination: + logging.debug(f"Destination {destination} reached with a valid path: {path}") + return path + + for neighbor, weight in graph.get(node, []): + if neighbor not in visited: + logging.debug(f"Qeue -> neighbour: {neighbor}, weight: {weight}") + heapq.heappush(queue, ( + cost + weight, + neighbor, + path, + sum_ec, + sum_ce, + sum_ee, + min_ure + )) + logging.debug("No valid path found that meets the restrictions.") + return [] + + + def __compute_node_weight(self, ec, ce, ee, ure, total_power_supply, total_power_boards, total_power_components, total_power_transceivers, alpha=1, beta=1, gamma=1, delta=1): + """ + Calcula el peso de un nodo con la fórmula: + w(v) = α·EC + β·CE + γ/EE + δ·(1 - URE) + """ + traffic = 100 + # Measure one hour of traffic + time = 1 + + power_idle = ec + total_power_supply + total_power_boards + total_power_components + total_power_transceivers + power_traffic = traffic * ee + + power_total = (power_idle + power_traffic) + + green_index = power_total * time / 1000 * (1 - ure) * ce + + return green_index + + diff --git a/src/planner/topo_ddbb.json b/src/planner/topo_ddbb.json new file mode 100644 index 0000000..76fb08c --- /dev/null +++ b/src/planner/topo_ddbb.json @@ -0,0 +1,43 @@ +{ + "ietf-network:networks":{ + "network":[ + { + "network-id":"example_network", + "network-types":{ + + }, + "node":[ + {"node-id":"A"}, + {"node-id":"B"}, + {"node-id":"C"}, + {"node-id":"D"}, + {"node-id":"E"}, + {"node-id":"F"}, + {"node-id":"G"} + ], + "link":[ + {"link-id":"A-E","source":{"source-node":"A"},"destination":{"dest-node":"E"}}, + {"link-id":"E-A","source":{"source-node":"E"},"destination":{"dest-node":"A"}}, + {"link-id":"A-D","source":{"source-node":"A"},"destination":{"dest-node":"D"}}, + {"link-id":"D-A","source":{"source-node":"D"},"destination":{"dest-node":"A"}}, + {"link-id":"A-C","source":{"source-node":"A"},"destination":{"dest-node":"C"}}, + {"link-id":"C-A","source":{"source-node":"C"},"destination":{"dest-node":"A"}}, + {"link-id":"B-C","source":{"source-node":"B"},"destination":{"dest-node":"C"}}, + {"link-id":"C-B","source":{"source-node":"C"},"destination":{"dest-node":"B"}}, + {"link-id":"B-D","source":{"source-node":"B"},"destination":{"dest-node":"D"}}, + {"link-id":"D-B","source":{"source-node":"D"},"destination":{"dest-node":"B"}}, + {"link-id":"B-F","source":{"source-node":"B"},"destination":{"dest-node":"F"}}, + {"link-id":"F-B","source":{"source-node":"F"},"destination":{"dest-node":"B"}}, + {"link-id":"D-E","source":{"source-node":"D"},"destination":{"dest-node":"E"}}, + {"link-id":"E-D","source":{"source-node":"E"},"destination":{"dest-node":"D"}}, + {"link-id":"D-F","source":{"source-node":"D"},"destination":{"dest-node":"F"}}, + {"link-id":"F-D","source":{"source-node":"F"},"destination":{"dest-node":"D"}}, + {"link-id":"E-G","source":{"source-node":"E"},"destination":{"dest-node":"G"}}, + {"link-id":"G-E","source":{"source-node":"G"},"destination":{"dest-node":"E"}}, + {"link-id":"F-G","source":{"source-node":"F"},"destination":{"dest-node":"G"}}, + {"link-id":"G-F","source":{"source-node":"G"},"destination":{"dest-node":"F"}} + ] + } + ] + } + } \ No newline at end of file diff --git a/src/realizers/ixia/NEII_V4.py b/src/realizers/ixia/NEII_V4.py index 64a1331..f9379d2 100644 --- a/src/realizers/ixia/NEII_V4.py +++ b/src/realizers/ixia/NEII_V4.py @@ -1,5 +1,18 @@ -###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. -###SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 file is an original contribution from Telefonica Innovación Digital S.L. from .automatizacion_ne2v4 import automatizacion import ipaddress, logging diff --git a/src/realizers/ixia/automatizacion_ne2v4.py b/src/realizers/ixia/automatizacion_ne2v4.py index bc822a0..fd8fc4f 100644 --- a/src/realizers/ixia/automatizacion_ne2v4.py +++ b/src/realizers/ixia/automatizacion_ne2v4.py @@ -1,5 +1,18 @@ -###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. -###SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 file is an original contribution from Telefonica Innovación Digital S.L. import requests class automatizacion: diff --git a/src/slice_ddbb.json b/src/slice_ddbb.json index 0637a08..60b2ee3 100644 --- a/src/slice_ddbb.json +++ b/src/slice_ddbb.json @@ -1 +1,14623 @@ -[] \ No newline at end of file +[ + { + "slice_id": "slice-service-55f943ad-e70c-4b87-9b4b-a2e818b83277", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-55f943ad-e70c-4b87-9b4b-a2e818b83277", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-739e94b8-8a0a-44e8-954d-578caf27a549", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-739e94b8-8a0a-44e8-954d-578caf27a549", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-8457f63e-7110-42c9-886c-fa20b3178a44", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-8457f63e-7110-42c9-886c-fa20b3178a44", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-0ffc7496-c9e0-42f5-8495-0f5680516e93", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-0ffc7496-c9e0-42f5-8495-0f5680516e93", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-8ab4a221-77c6-48e2-a01f-4ffa4ed59d93", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-8ab4a221-77c6-48e2-a01f-4ffa4ed59d93", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 3000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 200 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 3000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.1 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 3000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.1 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 30000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.1 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 30000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.1 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 30000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 1 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 0.7 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.1 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-8c824a26-c5a5-40a6-98b7-dde8aba22ff8", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-8c824a26-c5a5-40a6-98b7-dde8aba22ff8", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-a966b2b2-092d-4627-81c4-4a0cd8aa7a30", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-a966b2b2-092d-4627-81c4-4a0cd8aa7a30", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-1e527efa-6b47-4146-a848-f73c56832d02", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-1e527efa-6b47-4146-a848-f73c56832d02", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-c2593082-975d-463d-8e4c-ea7f1040ded0", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-c2593082-975d-463d-8e4c-ea7f1040ded0", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-13efa280-5ea4-48bf-a3af-2022edb09567", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-13efa280-5ea4-48bf-a3af-2022edb09567", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-0da255e3-335d-4da9-afe9-148fecfcd353", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-0da255e3-335d-4da9-afe9-148fecfcd353", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-4e47d793-4009-4997-b96a-1f1db85c866d", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-4e47d793-4009-4997-b96a-1f1db85c866d", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-eb85b4c8-0cf7-4ced-81f0-46dc21faf1eb", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-eb85b4c8-0cf7-4ced-81f0-46dc21faf1eb", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-c8ce44b9-9d14-4eb4-b3a7-e34a5ff390d0", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-c8ce44b9-9d14-4eb4-b3a7-e34a5ff390d0", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-d6a96aac-316a-433d-ad8a-c11692f751d7", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-d6a96aac-316a-433d-ad8a-c11692f751d7", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-12352d8c-7e42-441e-9fac-d6a42df0eedf", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-12352d8c-7e42-441e-9fac-d6a42df0eedf", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-05881259-2ead-414d-a5d7-32b46f0c0242", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-05881259-2ead-414d-a5d7-32b46f0c0242", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-846f0019-fc58-4cbb-8738-e74ceb4b786d", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-846f0019-fc58-4cbb-8738-e74ceb4b786d", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-a28d5d20-9de5-46d4-bf17-f0f1a190e114", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-a28d5d20-9de5-46d4-bf17-f0f1a190e114", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-6caeb491-6061-4dc8-8293-b000d29149aa", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-6caeb491-6061-4dc8-8293-b000d29149aa", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-4abcf408-faf4-45e0-bbb9-6fda9b3f5a9a", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-4abcf408-faf4-45e0-bbb9-6fda9b3f5a9a", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-3fa7f292-744d-4a19-8016-b7d15ecd1237", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-3fa7f292-744d-4a19-8016-b7d15ecd1237", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-8c98bada-c088-42ce-8f2c-7ea5db19c385", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-8c98bada-c088-42ce-8f2c-7ea5db19c385", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-a16358c3-965b-46c1-9e61-3c11cc27f130", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-a16358c3-965b-46c1-9e61-3c11cc27f130", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-004f390e-f396-4994-a043-488783ec2077", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-004f390e-f396-4994-a043-488783ec2077", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-32319f83-044a-4ac0-86c3-2d19fbaf7b3b", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-32319f83-044a-4ac0-86c3-2d19fbaf7b3b", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-01ce2871-147f-422b-b89e-f9f38ef78fb1", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-01ce2871-147f-422b-b89e-f9f38ef78fb1", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-d9434626-01ec-4d20-b049-b8b6d6b20bfe", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-d9434626-01ec-4d20-b049-b8b6d6b20bfe", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-2c45ad40-8d94-4538-a23c-dfa396cc82df", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-2c45ad40-8d94-4538-a23c-dfa396cc82df", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-bd51961a-34a1-4af4-9740-b9e1b93acb72", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-bd51961a-34a1-4af4-9740-b9e1b93acb72", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-7fd963dc-8c30-45b1-aafb-dda5b8ec30bf", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-7fd963dc-8c30-45b1-aafb-dda5b8ec30bf", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-2a664864-fd2e-44c3-b0fd-437d10d7c106", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-2a664864-fd2e-44c3-b0fd-437d10d7c106", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-b21465d9-515e-488e-865b-657aa3529b81", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-b21465d9-515e-488e-865b-657aa3529b81", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-0ef20ca5-a3ce-40f7-b550-f53a82a0a24f", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-0ef20ca5-a3ce-40f7-b550-f53a82a0a24f", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-93e4f3b1-90f4-430d-8963-3c31fc34845d", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-93e4f3b1-90f4-430d-8963-3c31fc34845d", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-5743e0f9-ac1a-47ce-9278-c0ef26f1f2d6", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 2 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-5743e0f9-ac1a-47ce-9278-c0ef26f1f2d6", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-87f589a7-d722-4160-8eec-5de1adad61eb", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-87f589a7-d722-4160-8eec-5de1adad61eb", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-e109180a-0cf9-4c0c-b7b3-edffadf7a5b4", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-e109180a-0cf9-4c0c-b7b3-edffadf7a5b4", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-59a2eac7-a5f9-4425-9bef-eb9d9df81d57", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-59a2eac7-a5f9-4425-9bef-eb9d9df81d57", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1c", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-F1c_DU-F1c" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1c", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-F1c_DU-F1c" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1c_DU-F1c", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-b9aa1b0e-ce84-47a7-9ca4-73fa26cdf081", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-b9aa1b0e-ce84-47a7-9ca4-73fa26cdf081", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1u1", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-F1u1_DU-F1u1" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1u1", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-F1u1_DU-F1u1" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1u1_DU-F1u1", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-724d3b94-0e9d-4f16-a97b-0c595194d086", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-724d3b94-0e9d-4f16-a97b-0c595194d086", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1u2", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-F1u2_DU-F1u2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1u2", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-F1u2_DU-F1u2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1u2_DU-F1u2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-d0090070-0010-471d-9740-6cb9ac36a934", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-d0090070-0010-471d-9740-6cb9ac36a934", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "kbps", + "bound": 2000 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "01", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "02", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "3.3.3.3" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "kbps", + "bound": 2000 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "3.3.3.3" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-1d4ab635-6fad-4fc4-bc7b-2eb64c188ea5", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-1d4ab635-6fad-4fc4-bc7b-2eb64c188ea5", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-19f14821-7f37-49e0-8488-42a7448c0f8c", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-19f14821-7f37-49e0-8488-42a7448c0f8c", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-4221095b-cf7c-422e-9c4e-f02198550d1c", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-4221095b-cf7c-422e-9c4e-f02198550d1c", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-70d56e71-72d0-496e-a4d4-6d1f2891c21b", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-70d56e71-72d0-496e-a4d4-6d1f2891c21b", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 20200 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 20200 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 750 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 20200 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 6 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 750 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 20200 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 6 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 750 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + }, + { + "slice_id": "slice-service-e7601de8-621e-4779-bdb1-7ab80eea92ff", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-e7601de8-621e-4779-bdb1-7ab80eea92ff", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-7bca20b0-a373-4b75-932a-3519a9154ff1", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-7bca20b0-a373-4b75-932a-3519a9154ff1", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-5269b552-1d09-4e21-bad1-8d55ef81db82", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-5269b552-1d09-4e21-bad1-8d55ef81db82", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-feef84a2-2e18-4903-8d4a-a969759c17f7", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 2 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-feef84a2-2e18-4903-8d4a-a969759c17f7", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-706cb71b-c21a-4ca5-8383-cb44d67b12d7", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-706cb71b-c21a-4ca5-8383-cb44d67b12d7", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-11b55aea-267b-41f0-a66d-0997fc9371f2", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-11b55aea-267b-41f0-a66d-0997fc9371f2", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-da05c6c9-621a-4ab9-8e72-949ac1270117", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-da05c6c9-621a-4ab9-8e72-949ac1270117", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1c", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-F1c_DU-F1c" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1c", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-F1c_DU-F1c" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1c_DU-F1c", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-910f2ef3-bd43-4da6-9ae9-e5666eb80c28", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-910f2ef3-bd43-4da6-9ae9-e5666eb80c28", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1u1", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-F1u1_DU-F1u1" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1u1", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-F1u1_DU-F1u1" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1u1_DU-F1u1", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-0daa849b-01e4-4b61-8fcb-bd3ebf010ed2", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-0daa849b-01e4-4b61-8fcb-bd3ebf010ed2", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-F1u2", + "sdp-ip-address": "10.60.10.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-F1u2_DU-F1u2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.10.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU-F1u2", + "sdp-ip-address": "10.60.11.2", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-F1u2_DU-F1u2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.11.2", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-F1u2_DU-F1u2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-729516cd-2c8f-4399-a3f4-866ad01074aa", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "5QI100", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "Joules", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "W/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "gCO2eq", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-729516cd-2c8f-4399-a3f4-866ad01074aa", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "5QI100" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-UP1", + "sdp-ip-address": "100.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "1.1.1.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "DU3", + "sdp-ip-address": "200.1.1.100", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "300", + "target-connection-group-id": "CU-UP1_DU3" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "2.2.2.100", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "2.2.2.2" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-UP1_DU3", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 20200 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 6 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 750 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "A", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "B", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "A" + }, + { + "sdp-id": "B" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "kbps", + "bound": 2000 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "1.1.1.1" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "3.3.3.3" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-3ba7a76d-8501-448a-b31d-93edb469ea6f", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-679a087b-d31c-44ba-a4db-064c1044fc27", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": 10 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 30 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-3ba7a76d-8501-448a-b31d-93edb469ea6f", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-679a087b-d31c-44ba-a4db-064c1044fc27" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "10.10.10.10", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "24", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "10.10.10.10" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "11.11.11.11", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "24", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "11.11.11.11" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-f900b0dd-1472-489d-86cd-33ba57fb2964", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 20 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-f900b0dd-1472-489d-86cd-33ba57fb2964", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-886c7f05-b9a5-4d6f-87d4-a3938b508eeb", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-886c7f05-b9a5-4d6f-87d4-a3938b508eeb", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-bb8ef27a-fa94-405b-b49b-d13d0149a53e", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-bb8ef27a-fa94-405b-b49b-d13d0149a53e", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-20b8240b-4aab-450c-a5df-9c18d0bd5630", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "A", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 2 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 20 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-20b8240b-4aab-450c-a5df-9c18d0bd5630", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "A" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N2", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "AMF-N2", + "sdp-ip-address": "10.60.60.105", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "100", + "target-connection-group-id": "CU-N2_AMF-N2" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.105", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N2_AMF-N2", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-d369d498-f90a-4590-8b30-d1a94a4efdec", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "B", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 200 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 5 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-d369d498-f90a-4590-8b30-d1a94a4efdec", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "B" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.10.6", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N32_UPF-N32", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-49bdc12c-0613-49db-8e90-d972dc5ca787", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-49bdc12c-0613-49db-8e90-d972dc5ca787", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-d60e57e1-92dd-4a3d-864f-de7431580d48", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "C", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "throughput", + "metric-unit": "kbps", + "bound": 100 + }, + { + "metric-type": "latency", + "metric-unit": "ms", + "bound": 10 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-d60e57e1-92dd-4a3d-864f-de7431580d48", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "C" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "CU-N31", + "sdp-ip-address": "10.60.11.3", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "10.60.11.3", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "4.4.4.4" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "UPF-N31", + "sdp-ip-address": "10.60.60.106", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "102", + "target-connection-group-id": "CU-N31_UPF-N31" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "10.60.60.106", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "CU-N31_UPF-N31", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-9ea69fac-d731-421a-b72d-7b99a75b60a6", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-0e792155-d5bf-4959-a1ac-2b49df3066d0", + "description": "", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": 10 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 30 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-9ea69fac-d731-421a-b72d-7b99a75b60a6", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-0e792155-d5bf-4959-a1ac-2b49df3066d0" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "10.10.10.10", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "24", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "10.10.10.10" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "5.5.5.5", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "24", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "TFS" + }, + { + "slice_id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", + "intent": { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", + "description": "internet", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": 10 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 30 + }, + { + "metric-type": "one-way-delay-variation-maximum", + "metric-unit": "milliseconds", + "bound": 6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "10.10.10.10", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "10.10.10.10" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "5.5.5.5", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + }, + "controller": "IXIA" + } +] \ No newline at end of file diff --git a/src/templates/ietf_template.json b/src/templates/ietf_template.json new file mode 100644 index 0000000..84e83cd --- /dev/null +++ b/src/templates/ietf_template.json @@ -0,0 +1,165 @@ +[ + { + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", + "description": "internet", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": 10 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 30 + }, + { + "metric-type": "one-way-delay-variation-maximum", + "metric-unit": "milliseconds", + "bound": 6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "10.10.10.10", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "10.10.10.10" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "5.5.5.5", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } + } +] \ No newline at end of file diff --git a/src/templates/ietf_template_empty.json b/src/templates/ietf_template_empty.json index fc458ea..cdaf66c 100644 --- a/src/templates/ietf_template_empty.json +++ b/src/templates/ietf_template_empty.json @@ -43,7 +43,7 @@ "sdps":{ "sdp":[ { - "id":"01", + "id": "", "geo-location":"", "node-id":"", "sdp-ip-address":"", @@ -90,7 +90,7 @@ "sdp-monitoring":"" }, { - "id":"02", + "id":"", "geo-location":"", "node-id":"", "sdp-ip-address":"", diff --git a/src/templates/ietf_template_example.json b/src/templates/ietf_template_example.json index d9a660f..867776a 100644 --- a/src/templates/ietf_template_example.json +++ b/src/templates/ietf_template_example.json @@ -4,10 +4,31 @@ "slo-sle-templates": { "slo-sle-template": [ { - "id": "qos-profile-0bbf32f4-aa3d-4ef1-b3fb-806f4ed73912", + "id": "B", "description": "", "slo-policy": { - "metric-bound": [] + "metric-bound": [ + { + "metric-type": "energy_consumption", + "metric-unit": "kWh", + "bound": 18000 + }, + { + "metric-type": "energy_efficiency", + "metric-unit": "Wats/bps", + "bound": 5 + }, + { + "metric-type": "carbon_emission", + "metric-unit": "grams of CO2 per kWh", + "bound": 650 + }, + { + "metric-type": "renewable_energy_usage", + "metric-unit": "rate", + "bound": 0.5 + } + ] }, "sle-policy": { "security": "", @@ -26,8 +47,8 @@ }, "slice-service": [ { - "id": "slice-service-561d9dd7-c2e0-40c9-a222-ec6913ea5a57", - "description": "example 5G Slice mapping", + "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", + "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", "service-tags": { "tag-type": { "tag-type": "", @@ -35,24 +56,24 @@ } }, "slo-sle-policy": { - "slo-sle-template": "qos-profile-0bbf32f4-aa3d-4ef1-b3fb-806f4ed73912" + "slo-sle-template": "B" }, "status": {}, "sdps": { "sdp": [ { - "id": "01", + "id": "A", "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "1.1.1.1", + "node-id": "CU-N32", + "sdp-ip-address": "10.60.11.3", "tp-ref": "", "service-match-criteria": { "match-criterion": [ { "index": 1, "match-type": "VLAN", - "value": null, - "target-connection-group-id": "" + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" } ] }, @@ -67,10 +88,10 @@ "attachment-circuit": [ { "id": "100", - "ac-ipv4-address": "", + "ac-ipv4-address": "10.60.11.3", "ac-ipv4-prefix-length": 0, "sdp-peering": { - "peer-sap-id": "1.1.1.1" + "peer-sap-id": "4.4.4.4" }, "status": {} } @@ -80,18 +101,18 @@ "sdp-monitoring": "" }, { - "id": "02", + "id": "B", "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "3.3.3.3", + "node-id": "UPF-N32", + "sdp-ip-address": "10.60.10.6", "tp-ref": "", "service-match-criteria": { "match-criterion": [ { "index": 1, "match-type": "VLAN", - "value": null, - "target-connection-group-id": "" + "value": "101", + "target-connection-group-id": "CU-N32_UPF-N32" } ] }, @@ -106,10 +127,10 @@ "attachment-circuit": [ { "id": "200", - "ac-ipv4-address": "", + "ac-ipv4-address": "10.60.10.6", "ac-ipv4-prefix-length": 0, "sdp-peering": { - "peer-sap-id": "3.3.3.3" + "peer-sap-id": "5.5.5.5" }, "status": {} } @@ -123,17 +144,17 @@ "connection-groups": { "connection-group": [ { - "id": "source-node_destination-node", + "id": "CU-N32_UPF-N32", "connectivity-type": "ietf-vpn-common:any-to-any", "connectivity-construct": [ { "id": 1, "a2a-sdp": [ { - "sdp-id": "01" + "sdp-id": "A" }, { - "sdp-id": "02" + "sdp-id": "B" } ] } diff --git a/src/templates/nbi_template.json b/src/templates/nbi_template.json new file mode 100644 index 0000000..5b992a1 --- /dev/null +++ b/src/templates/nbi_template.json @@ -0,0 +1,163 @@ +{ + "ietf-network-slice-service:network-slice-services": { + "slo-sle-templates": { + "slo-sle-template": [ + { + "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", + "description": "internet", + "slo-policy": { + "metric-bound": [ + { + "metric-type": "one-way-bandwidth", + "metric-unit": "Mbps", + "bound": 10 + }, + { + "metric-type": "one-way-delay-maximum", + "metric-unit": "milliseconds", + "bound": 30 + }, + { + "metric-type": "one-way-delay-variation-maximum", + "metric-unit": "milliseconds", + "bound": 6 + } + ] + }, + "sle-policy": { + "security": "", + "isolation": "", + "path-constraints": { + "service-functions": "", + "diversity": { + "diversity": { + "diversity-type": "" + } + } + } + } + } + ] + }, + "slice-service": [ + { + "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", + "description": "example 5G Slice mapping", + "service-tags": { + "tag-type": { + "tag-type": "", + "value": "" + } + }, + "slo-sle-policy": { + "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" + }, + "status": {}, + "sdps": { + "sdp": [ + { + "id": "", + "geo-location": "", + "node-id": "source-node", + "sdp-ip-address": "10.10.10.10", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "100", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "10.10.10.10" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + }, + { + "id": "", + "geo-location": "", + "node-id": "destination-node", + "sdp-ip-address": "5.5.5.5", + "tp-ref": "", + "service-match-criteria": { + "match-criterion": [ + { + "index": 1, + "match-type": "VLAN", + "value": "12", + "target-connection-group-id": "" + } + ] + }, + "incoming-qos-policy": "", + "outgoing-qos-policy": "", + "sdp-peering": { + "peer-sap-id": "", + "protocols": "" + }, + "ac-svc-ref": [], + "attachment-circuits": { + "attachment-circuit": [ + { + "id": "200", + "ac-ipv4-address": "", + "ac-ipv4-prefix-length": 0, + "sdp-peering": { + "peer-sap-id": "5.5.5.5" + }, + "status": {} + } + ] + }, + "status": {}, + "sdp-monitoring": "" + } + ] + }, + "connection-groups": { + "connection-group": [ + { + "id": "source-node_destination-node", + "connectivity-type": "ietf-vpn-common:any-to-any", + "connectivity-construct": [ + { + "id": 1, + "a2a-sdp": [ + { + "sdp-id": "01" + }, + { + "sdp-id": "02" + } + ] + } + ], + "status": {} + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/src/templates/realizer_template.json b/src/templates/realizer_template.json new file mode 100644 index 0000000..265a1e4 --- /dev/null +++ b/src/templates/realizer_template.json @@ -0,0 +1,14 @@ +{ + "services": [ + { + "src_node_ip": "10.10.10.10", + "dst_node_ip": "5.5.5.5", + "vlan_id": "12", + "bandwidth": 10, + "latency": 30, + "tolerance": 6, + "latency_version": "internet", + "reliability": null + } + ] +} \ No newline at end of file diff --git a/src/webui/gui.py b/src/webui/gui.py index 82f414d..1afb831 100644 --- a/src/webui/gui.py +++ b/src/webui/gui.py @@ -1,5 +1,18 @@ -###SPDX-FileCopyrightText: © 2024 Telefónica Innovación Digital S.L. -###SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT 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 file is an original contribution from Telefonica Innovación Digital S.L. import json, logging, uuid import requests diff --git a/src/webui/templates/dev.html b/src/webui/templates/dev.html index ef6d18d..7a18ecc 100644 --- a/src/webui/templates/dev.html +++ b/src/webui/templates/dev.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/src/webui/templates/index.html b/src/webui/templates/index.html index 9328ac3..bef6b7a 100644 --- a/src/webui/templates/index.html +++ b/src/webui/templates/index.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/src/webui/templates/ixia.html b/src/webui/templates/ixia.html index 47e51a1..f9821e8 100644 --- a/src/webui/templates/ixia.html +++ b/src/webui/templates/ixia.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/src/webui/templates/login.html b/src/webui/templates/login.html index 9ef6fa4..5dd54b6 100644 --- a/src/webui/templates/login.html +++ b/src/webui/templates/login.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/src/webui/templates/search.html b/src/webui/templates/search.html index 676705b..6ace2c1 100644 --- a/src/webui/templates/search.html +++ b/src/webui/templates/search.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/src/webui/templates/welcome.html b/src/webui/templates/welcome.html index d04082c..3fa27b2 100644 --- a/src/webui/templates/welcome.html +++ b/src/webui/templates/welcome.html @@ -1,3 +1,18 @@ + + + + + + + + + + + + + + + -- GitLab From bcb1679594749cc8b1ef8b8ab14c1961d5cfb626 Mon Sep 17 00:00:00 2001 From: velazquez Date: Thu, 31 Jul 2025 13:08:21 +0200 Subject: [PATCH 08/14] Clean code --- src/Constants.py | 2 +- src/slice_ddbb.json | 14624 +----------------- src/templates/3gpp_template_example.json | 187 - src/templates/3gpp_template_filled.json | 182 - src/templates/L2-VPN_template_example.json | 95 - src/templates/L2-VPN_template_filled.json | 36 - src/templates/L3-VPN_template_example.json | 98 - src/templates/L3-VPN_template_filled.json | 44 - src/templates/descriptor-topology copy.json | 570 - src/templates/descriptor-topology-tid.json | 752 - src/templates/descriptor-topology.json | 290 - src/templates/descriptor.json | 27 - src/templates/ietf_template.json | 165 - src/templates/ietf_template_example.json | 170 - src/templates/ietf_template_filled.json | 152 - src/templates/ips.json | 18 - src/templates/nbi_template.json | 163 - src/templates/realizer_template.json | 14 - 18 files changed, 2 insertions(+), 17587 deletions(-) delete mode 100644 src/templates/3gpp_template_example.json delete mode 100644 src/templates/3gpp_template_filled.json delete mode 100644 src/templates/L2-VPN_template_example.json delete mode 100644 src/templates/L2-VPN_template_filled.json delete mode 100644 src/templates/L3-VPN_template_example.json delete mode 100644 src/templates/L3-VPN_template_filled.json delete mode 100644 src/templates/descriptor-topology copy.json delete mode 100644 src/templates/descriptor-topology-tid.json delete mode 100644 src/templates/descriptor-topology.json delete mode 100644 src/templates/descriptor.json delete mode 100644 src/templates/ietf_template.json delete mode 100644 src/templates/ietf_template_example.json delete mode 100644 src/templates/ietf_template_filled.json delete mode 100644 src/templates/ips.json delete mode 100644 src/templates/nbi_template.json delete mode 100644 src/templates/realizer_template.json diff --git a/src/Constants.py b/src/Constants.py index 15babf4..62ec457 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -32,7 +32,7 @@ with open(os.path.join(SRC_PATH, 'IPs.json')) as f: TEMPLATES_PATH = os.path.join(SRC_PATH, "templates") # Dump templates -DUMP_TEMPLATES = True +DUMP_TEMPLATES = False # Mapper diff --git a/src/slice_ddbb.json b/src/slice_ddbb.json index 60b2ee3..0637a08 100644 --- a/src/slice_ddbb.json +++ b/src/slice_ddbb.json @@ -1,14623 +1 @@ -[ - { - "slice_id": "slice-service-55f943ad-e70c-4b87-9b4b-a2e818b83277", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-55f943ad-e70c-4b87-9b4b-a2e818b83277", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-739e94b8-8a0a-44e8-954d-578caf27a549", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-739e94b8-8a0a-44e8-954d-578caf27a549", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-8457f63e-7110-42c9-886c-fa20b3178a44", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-8457f63e-7110-42c9-886c-fa20b3178a44", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-0ffc7496-c9e0-42f5-8495-0f5680516e93", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-0ffc7496-c9e0-42f5-8495-0f5680516e93", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-8ab4a221-77c6-48e2-a01f-4ffa4ed59d93", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-8ab4a221-77c6-48e2-a01f-4ffa4ed59d93", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 3000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 200 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 3000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.1 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 3000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.1 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 30000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.1 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 30000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.1 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 30000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 1 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 0.7 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.1 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-8c824a26-c5a5-40a6-98b7-dde8aba22ff8", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-8c824a26-c5a5-40a6-98b7-dde8aba22ff8", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-a966b2b2-092d-4627-81c4-4a0cd8aa7a30", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-a966b2b2-092d-4627-81c4-4a0cd8aa7a30", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-1e527efa-6b47-4146-a848-f73c56832d02", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-1e527efa-6b47-4146-a848-f73c56832d02", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-c2593082-975d-463d-8e4c-ea7f1040ded0", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-c2593082-975d-463d-8e4c-ea7f1040ded0", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-13efa280-5ea4-48bf-a3af-2022edb09567", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-13efa280-5ea4-48bf-a3af-2022edb09567", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-0da255e3-335d-4da9-afe9-148fecfcd353", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-0da255e3-335d-4da9-afe9-148fecfcd353", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-4e47d793-4009-4997-b96a-1f1db85c866d", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-4e47d793-4009-4997-b96a-1f1db85c866d", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-eb85b4c8-0cf7-4ced-81f0-46dc21faf1eb", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-eb85b4c8-0cf7-4ced-81f0-46dc21faf1eb", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-c8ce44b9-9d14-4eb4-b3a7-e34a5ff390d0", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-c8ce44b9-9d14-4eb4-b3a7-e34a5ff390d0", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-d6a96aac-316a-433d-ad8a-c11692f751d7", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-d6a96aac-316a-433d-ad8a-c11692f751d7", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-12352d8c-7e42-441e-9fac-d6a42df0eedf", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-12352d8c-7e42-441e-9fac-d6a42df0eedf", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-05881259-2ead-414d-a5d7-32b46f0c0242", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-05881259-2ead-414d-a5d7-32b46f0c0242", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-846f0019-fc58-4cbb-8738-e74ceb4b786d", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-846f0019-fc58-4cbb-8738-e74ceb4b786d", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-a28d5d20-9de5-46d4-bf17-f0f1a190e114", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-a28d5d20-9de5-46d4-bf17-f0f1a190e114", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-6caeb491-6061-4dc8-8293-b000d29149aa", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-6caeb491-6061-4dc8-8293-b000d29149aa", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-4abcf408-faf4-45e0-bbb9-6fda9b3f5a9a", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-4abcf408-faf4-45e0-bbb9-6fda9b3f5a9a", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-3fa7f292-744d-4a19-8016-b7d15ecd1237", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-3fa7f292-744d-4a19-8016-b7d15ecd1237", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-8c98bada-c088-42ce-8f2c-7ea5db19c385", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-8c98bada-c088-42ce-8f2c-7ea5db19c385", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-a16358c3-965b-46c1-9e61-3c11cc27f130", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-a16358c3-965b-46c1-9e61-3c11cc27f130", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-004f390e-f396-4994-a043-488783ec2077", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-004f390e-f396-4994-a043-488783ec2077", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-32319f83-044a-4ac0-86c3-2d19fbaf7b3b", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-32319f83-044a-4ac0-86c3-2d19fbaf7b3b", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-01ce2871-147f-422b-b89e-f9f38ef78fb1", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-01ce2871-147f-422b-b89e-f9f38ef78fb1", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-d9434626-01ec-4d20-b049-b8b6d6b20bfe", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-d9434626-01ec-4d20-b049-b8b6d6b20bfe", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-2c45ad40-8d94-4538-a23c-dfa396cc82df", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-2c45ad40-8d94-4538-a23c-dfa396cc82df", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-bd51961a-34a1-4af4-9740-b9e1b93acb72", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-bd51961a-34a1-4af4-9740-b9e1b93acb72", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-7fd963dc-8c30-45b1-aafb-dda5b8ec30bf", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-7fd963dc-8c30-45b1-aafb-dda5b8ec30bf", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-2a664864-fd2e-44c3-b0fd-437d10d7c106", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-2a664864-fd2e-44c3-b0fd-437d10d7c106", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-b21465d9-515e-488e-865b-657aa3529b81", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-b21465d9-515e-488e-865b-657aa3529b81", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-0ef20ca5-a3ce-40f7-b550-f53a82a0a24f", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-0ef20ca5-a3ce-40f7-b550-f53a82a0a24f", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-93e4f3b1-90f4-430d-8963-3c31fc34845d", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-93e4f3b1-90f4-430d-8963-3c31fc34845d", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-5743e0f9-ac1a-47ce-9278-c0ef26f1f2d6", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 2 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-5743e0f9-ac1a-47ce-9278-c0ef26f1f2d6", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-87f589a7-d722-4160-8eec-5de1adad61eb", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-87f589a7-d722-4160-8eec-5de1adad61eb", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-e109180a-0cf9-4c0c-b7b3-edffadf7a5b4", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-e109180a-0cf9-4c0c-b7b3-edffadf7a5b4", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-59a2eac7-a5f9-4425-9bef-eb9d9df81d57", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-59a2eac7-a5f9-4425-9bef-eb9d9df81d57", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1c", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-F1c_DU-F1c" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1c", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-F1c_DU-F1c" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1c_DU-F1c", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-b9aa1b0e-ce84-47a7-9ca4-73fa26cdf081", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-b9aa1b0e-ce84-47a7-9ca4-73fa26cdf081", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1u1", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-F1u1_DU-F1u1" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1u1", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-F1u1_DU-F1u1" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1u1_DU-F1u1", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-724d3b94-0e9d-4f16-a97b-0c595194d086", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-724d3b94-0e9d-4f16-a97b-0c595194d086", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1u2", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-F1u2_DU-F1u2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1u2", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-F1u2_DU-F1u2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1u2_DU-F1u2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-d0090070-0010-471d-9740-6cb9ac36a934", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-d0090070-0010-471d-9740-6cb9ac36a934", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "kbps", - "bound": 2000 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "01", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "02", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "3.3.3.3" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "kbps", - "bound": 2000 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "3.3.3.3" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-1d4ab635-6fad-4fc4-bc7b-2eb64c188ea5", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-1d4ab635-6fad-4fc4-bc7b-2eb64c188ea5", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-19f14821-7f37-49e0-8488-42a7448c0f8c", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-19f14821-7f37-49e0-8488-42a7448c0f8c", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-4221095b-cf7c-422e-9c4e-f02198550d1c", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-4221095b-cf7c-422e-9c4e-f02198550d1c", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-70d56e71-72d0-496e-a4d4-6d1f2891c21b", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-70d56e71-72d0-496e-a4d4-6d1f2891c21b", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 20200 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 20200 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 750 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 20200 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 6 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 750 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 20200 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 6 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 750 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - }, - { - "slice_id": "slice-service-e7601de8-621e-4779-bdb1-7ab80eea92ff", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-e7601de8-621e-4779-bdb1-7ab80eea92ff", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-7bca20b0-a373-4b75-932a-3519a9154ff1", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-7bca20b0-a373-4b75-932a-3519a9154ff1", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-5269b552-1d09-4e21-bad1-8d55ef81db82", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-5269b552-1d09-4e21-bad1-8d55ef81db82", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-feef84a2-2e18-4903-8d4a-a969759c17f7", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 2 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-feef84a2-2e18-4903-8d4a-a969759c17f7", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-706cb71b-c21a-4ca5-8383-cb44d67b12d7", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-706cb71b-c21a-4ca5-8383-cb44d67b12d7", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-11b55aea-267b-41f0-a66d-0997fc9371f2", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-11b55aea-267b-41f0-a66d-0997fc9371f2", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-da05c6c9-621a-4ab9-8e72-949ac1270117", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-da05c6c9-621a-4ab9-8e72-949ac1270117", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1c", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-F1c_DU-F1c" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1c", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-F1c_DU-F1c" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1c_DU-F1c", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-910f2ef3-bd43-4da6-9ae9-e5666eb80c28", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-910f2ef3-bd43-4da6-9ae9-e5666eb80c28", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1u1", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-F1u1_DU-F1u1" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1u1", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-F1u1_DU-F1u1" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1u1_DU-F1u1", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-0daa849b-01e4-4b61-8fcb-bd3ebf010ed2", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-0daa849b-01e4-4b61-8fcb-bd3ebf010ed2", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-F1u2", - "sdp-ip-address": "10.60.10.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-F1u2_DU-F1u2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.10.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU-F1u2", - "sdp-ip-address": "10.60.11.2", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-F1u2_DU-F1u2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.11.2", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-F1u2_DU-F1u2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-729516cd-2c8f-4399-a3f4-866ad01074aa", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "5QI100", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "Joules", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "W/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "gCO2eq", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-729516cd-2c8f-4399-a3f4-866ad01074aa", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "5QI100" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-UP1", - "sdp-ip-address": "100.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "1.1.1.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "DU3", - "sdp-ip-address": "200.1.1.100", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "300", - "target-connection-group-id": "CU-UP1_DU3" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "2.2.2.100", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "2.2.2.2" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-UP1_DU3", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 20200 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 6 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 750 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "kbps", - "bound": 2000 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-11327140-7361-41b3-aa45-e84a7fb40be9", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "1.1.1.1" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "3.3.3.3" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-3ba7a76d-8501-448a-b31d-93edb469ea6f", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "qos-profile-679a087b-d31c-44ba-a4db-064c1044fc27", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "Mbps", - "bound": 10 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 30 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-3ba7a76d-8501-448a-b31d-93edb469ea6f", - "description": "example 5G Slice mapping", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "qos-profile-679a087b-d31c-44ba-a4db-064c1044fc27" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "10.10.10.10", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "24", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "10.10.10.10" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "11.11.11.11", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "24", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "11.11.11.11" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "source-node_destination-node", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-f900b0dd-1472-489d-86cd-33ba57fb2964", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 20 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-f900b0dd-1472-489d-86cd-33ba57fb2964", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-886c7f05-b9a5-4d6f-87d4-a3938b508eeb", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-886c7f05-b9a5-4d6f-87d4-a3938b508eeb", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-bb8ef27a-fa94-405b-b49b-d13d0149a53e", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-bb8ef27a-fa94-405b-b49b-d13d0149a53e", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-20b8240b-4aab-450c-a5df-9c18d0bd5630", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "A", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 2 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 20 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-20b8240b-4aab-450c-a5df-9c18d0bd5630", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "A" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N2", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "AMF-N2", - "sdp-ip-address": "10.60.60.105", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "100", - "target-connection-group-id": "CU-N2_AMF-N2" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.105", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N2_AMF-N2", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-d369d498-f90a-4590-8b30-d1a94a4efdec", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 200 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-d369d498-f90a-4590-8b30-d1a94a4efdec", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-49bdc12c-0613-49db-8e90-d972dc5ca787", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-49bdc12c-0613-49db-8e90-d972dc5ca787", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-d60e57e1-92dd-4a3d-864f-de7431580d48", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "C", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "throughput", - "metric-unit": "kbps", - "bound": 100 - }, - { - "metric-type": "latency", - "metric-unit": "ms", - "bound": 10 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-d60e57e1-92dd-4a3d-864f-de7431580d48", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "C" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "CU-N31", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "UPF-N31", - "sdp-ip-address": "10.60.60.106", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "102", - "target-connection-group-id": "CU-N31_UPF-N31" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.60.106", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N31_UPF-N31", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-9ea69fac-d731-421a-b72d-7b99a75b60a6", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "qos-profile-0e792155-d5bf-4959-a1ac-2b49df3066d0", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "Mbps", - "bound": 10 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 30 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-9ea69fac-d731-421a-b72d-7b99a75b60a6", - "description": "example 5G Slice mapping", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "qos-profile-0e792155-d5bf-4959-a1ac-2b49df3066d0" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "10.10.10.10", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "24", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "10.10.10.10" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "5.5.5.5", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "24", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "source-node_destination-node", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "TFS" - }, - { - "slice_id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", - "intent": { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", - "description": "internet", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "Mbps", - "bound": 10 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 30 - }, - { - "metric-type": "one-way-delay-variation-maximum", - "metric-unit": "milliseconds", - "bound": 6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", - "description": "example 5G Slice mapping", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "10.10.10.10", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "10.10.10.10" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "5.5.5.5", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "source-node_destination-node", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - }, - "controller": "IXIA" - } -] \ No newline at end of file +[] \ No newline at end of file diff --git a/src/templates/3gpp_template_example.json b/src/templates/3gpp_template_example.json deleted file mode 100644 index 28471a8..0000000 --- a/src/templates/3gpp_template_example.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "NetworkSlice1": { - "operationalState": "", - "administrativeState": "", - "serviceProfileList": [], - "networkSliceSubnetRef": "TopSliceSubnet1" - }, - "TopSliceSubnet1": { - "operationalState": "", - "administrativeState": "", - "nsInfo": {}, - "managedFunctionRef": [], - "networkSliceSubnetType": "TOP_SLICESUBNET", - "SliceProfileList": [ - { - "sliceProfileId": "TopId", - "pLMNInfoList": null, - "TopSliceSubnetProfile": { - "dLThptPerSliceSubnet": { - "GuaThpt": 200, - "MaxThpt": 400 - }, - "uLThptPerSliceSubnet": { - "GuaThpt": 200, - "MaxThpt": 400 - }, - "dLLatency": 20, - "uLLatency": 20 - } - } - ], - "networkSliceSubnetRef": [ - "CNSliceSubnet1", - "RANSliceSubnet1" - ] - }, - "CNSliceSubnet1": { - "operationalState": "", - "administrativeState": "", - "nsInfo": {}, - "managedFunctionRef": [], - "networkSliceSubnetType": "CN_SLICESUBNET", - "SliceProfileList": [ - { - "sliceProfileId": "CNId", - "pLMNInfoList": null, - "CNSliceSubnetProfile": { - "dLThptPerSliceSubnet": { - "GuaThpt": 100, - "MaxThpt": 200 - }, - "uLThptPerSliceSubnet": { - "GuaThpt": 100, - "MaxThpt": 200 - }, - "dLLatency": 8, - "uLLatency": 8 - } - } - ] - }, - "RANSliceSubnet1": { - "operationalState": "", - "administrativeState": "", - "nsInfo": {}, - "managedFunctionRef": [], - "networkSliceSubnetType": "RAN_SLICESUBNET", - "SliceProfileList": [ - { - "sliceProfileId": "RANId", - "pLMNInfoList": null, - "RANSliceSubnetProfile": { - "dLThptPerSliceSubnet": { - "GuaThpt": 100, - "MaxThpt": 200 - }, - "uLThptPerSliceSubnet": { - "GuaThpt": 100, - "MaxThpt": 200 - }, - "dLLatency": 12, - "uLLatency": 12 - } - } - ], - "networkSliceSubnetRef": [ - "MidhaulSliceSubnet1", - "BackhaulSliceSubnet1" - ] - }, - "MidhaulSliceSubnet1": { - "operationalState": "", - "administrativeState": "", - "nsInfo": {}, - "managedFunctionRef": [], - "networkSliceSubnetType": "RAN_SLICESUBNET", - "SliceProfileList": [ - { - "sliceProfileId": "MidhaulId", - "pLMNInfoList": null, - "RANSliceSubnetProfile": { - "dLThptPerSliceSubnet": { - "GuaThpt": 60, - "MaxThpt": 120 - }, - "uLThptPerSliceSubnet": { - "GuaThpt": 60, - "MaxThpt": 120 - }, - "dLLatency": 4, - "uLLatency": 4 - } - } - ], - "EpTransport": [ - "EpTransport CU-UP1", - "EpTransport DU3" - ] - }, - "BackhaulSliceSubnet1": { - "operationalState": "", - "administrativeState": "", - "nsInfo": {}, - "managedFunctionRef": [], - "networkSliceSubnetType": "RAN_SLICESUBNET", - "SliceProfileList": [ - { - "sliceProfileId": "BackhaulId", - "pLMNInfoList": null, - "RANSliceSubnetProfile": { - "dLThptPerSliceSubnet": { - "GuaThpt": 40, - "MaxThpt": 80 - }, - "uLThptPerSliceSubnet": { - "GuaThpt": 40, - "MaxThpt": 80 - }, - "dLLatency": 8, - "uLLatency": 8 - } - } - ], - "EpTransport": [ - "EpTransport CU-UP2", - "EpTransport UPF" - ] - }, - "EpTransport CU-UP1": { - "IpAddress": "100.1.1.1", - "logicalInterfaceInfo": { - "logicalInterfaceType": "VLAN", - "logicalInterfaceId": "300" - }, - "NextHopInfo": "100.1.1.254", - "qosProfile": "5QI100", - "EpApplicationRef": [ - "EP_F1U CU-UP1" - ] - }, - "EP_F1U CU-UP1": { - "localAddress": "100.1.1.2", - "remoteAddress": "1.1.3.2", - "epTransportRef": [ - "EpTransport CU-UP1" - ] - }, - "EpTransport DU3": { - "IpAddress": "1.1.3.1", - "logicalInterfaceInfo": { - "logicalInterfaceType": "VLAN", - "logicalInterfaceId": "300" - }, - "NextHopInfo": "1.1.3.254", - "qosProfile": "5QI100", - "EpApplicationRef": [ - "EP_F1U DU3" - ] - }, - "EP_F1U DU3": { - "localAddress": "1.1.3.2", - "remoteAddress": "100.1.1.2", - "epTransportRef": [ - "EpTransport DU3" - ] - } -} \ No newline at end of file diff --git a/src/templates/3gpp_template_filled.json b/src/templates/3gpp_template_filled.json deleted file mode 100644 index dcab03a..0000000 --- a/src/templates/3gpp_template_filled.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "NetworkSlice1":{ - "operationalState":"", - "administrativeState":"", - "serviceProfileList":[ // Requisitos generales de una NetworkSlice. Lo suponemos vacío. The attributes in ServiceProfile represent mapped requirements from an Network Slice Customer (e.g. an enterprise) to an Network Slice Provider - //{ - // "serviceProfileId":"", - // "pLMNInfoList": null, //It defines which PLMN and S-NSSAI combinations that are assigned for the service to satisfy service requirements represented by the ServiceProfile - // "sST":"2" // 1 (eMBB), 2(URLLC), 3(MIoT), 4(V2X) o 5(HMTC) - //} - ], - "networkSliceSubnetRef":"TopSliceSubnet1" //Es un DN (string) - }, - "TopSliceSubnet1":{ - "operationalState":"", - "administrativeState":"", - "nsInfo":{}, // Se usa si la slice está en un entorno virtualizado - "managedFunctionRef":[], // ??? Es un DNList (array de strings) - "networkSliceSubnetType":"TOP_SLICESUBNET", - "SliceProfileList":[ // Requisitos de una NetworkSliceSubnet, la cual representa un conjunto de funciones de red agrupadas. - { - "sliceProfileId":"TopId", - "pLMNInfoList":null, - "TopSliceSubnetProfile":{ //Condition: It shall be present when the slice profile is for top/root network slice subnet - "dLThptPerSliceSubnet":{ //kbps - "GuaThpt":1000, - "MaxThpt":2000 - }, - "uLThptPerSliceSubnet":{ - "GuaThpt":1000, - "MaxThpt":2000 - }, - "dLLatency":5, //ms - "uLLatency":5 - } - } - ], - "networkSliceSubnetRef":["CNSliceSubnet1","RANSliceSubnet1"] - }, - "CNSliceSubnet1":{ - "operationalState":"", - "administrativeState":"", - "nsInfo":{}, // Se usa si la slice está en un entorno virtualizado - "managedFunctionRef":[], // ??? Es un DNList (array de strings) - "networkSliceSubnetType":"CN_SLICESUBNET", - "SliceProfileList":[ // Requisitos de una NetworkSliceSubnet, la cual representa un conjunto de funciones de red agrupadas. Los requisitos de transporte se representan aquí - { - "sliceProfileId":"CNId", - "pLMNInfoList":null, - "CNSliceSubnetProfile":{ - "dLThptPerSliceSubnet":{ - "GuaThpt":500, - "MaxThpt":1000 - }, - "uLThptPerSliceSubnet":{ - "GuaThpt":500, - "MaxThpt":1000 - }, - "dLLatency":2, - "uLLatency":2 - } - } - ] - }, - "RANSliceSubnet1":{ - "operationalState":"", - "administrativeState":"", - "nsInfo":{}, // Se usa si la slice está en un entorno virtualizado - "managedFunctionRef":[], // ??? Es un DNList (array de strings) - "networkSliceSubnetType":"RAN_SLICESUBNET", - "SliceProfileList":[ // Requisitos de una NetworkSliceSubnet, la cual representa un conjunto de funciones de red agrupadas. Los requisitos de transporte se representan aquí - { - "sliceProfileId":"RANId", - "pLMNInfoList":null, - "RANSliceSubnetProfile":{ - "dLThptPerSliceSubnet":{ - "GuaThpt":500, - "MaxThpt":1000 - }, - "uLThptPerSliceSubnet":{ - "GuaThpt":500, - "MaxThpt":1000 - }, - "dLLatency":3, - "uLLatency":3 - } - } - ], - "networkSliceSubnetRef":["MidhaulSliceSubnet1", "BackhaulSliceSubnet1"] - }, - "MidhaulSliceSubnet1":{ - "operationalState":"", - "administrativeState":"", - "nsInfo":{}, // Se usa si la slice está en un entorno virtualizado - "managedFunctionRef":[], // ??? Es un DNList (array de strings), - "networkSliceSubnetType":"RAN_SLICESUBNET", - "SliceProfileList":[ // Requisitos de una NetworkSliceSubnet, la cual representa un conjunto de funciones de red agrupadas. Los requisitos de transporte se representan aquí - { - "sliceProfileId":"MidhaulId", - "pLMNInfoList":null, - "RANSliceSubnetProfile":{ - "dLThptPerSliceSubnet":{ - "GuaThpt":300, - "MaxThpt":600 - }, - "uLThptPerSliceSubnet":{ - "GuaThpt":300, - "MaxThpt":600 - }, - "dLLatency":1, - "uLLatency":1 - } - } - ], - "EpTransport":["EpTransport DU1","EpTransport CU-UP1"] // Es un DNList (array de strings) - }, - "BackhaulSliceSubnet1":{ - "operationalState":"", - "administrativeState":"", - "nsInfo":{}, // Se usa si la slice está en un entorno virtualizado - "managedFunctionRef":[], // ??? Es un DNList (array de strings), - "networkSliceSubnetType":"RAN_SLICESUBNET", - "SliceProfileList":[ // Requisitos de una NetworkSliceSubnet, la cual representa un conjunto de funciones de red agrupadas. Los requisitos de transporte se representan aquí - { - "sliceProfileId":"BackhaulId", - "pLMNInfoList":null, - "RANSliceSubnetProfile":{ - "dLThptPerSliceSubnet":{ - "GuaThpt":200, - "MaxThpt":400 - }, - "uLThptPerSliceSubnet":{ - "GuaThpt":200, - "MaxThpt":400 - }, - "dLLatency":2, - "uLLatency":2 - } - } - ], - "EpTransport":["EpTransport CU-UP2","EpTransport UPF"] // Es un DNList (array de strings) - }, - "EpTransport DU1": - { - "IpAddress":"100.1.1.1", - "logicalInterfaceInfo":{ - "logicalInterfaceType":"VLAN", //VLAN, MPLS o Segment - "logicalInterfaceId":"100" - }, - "NextHopInfo": "100.1.1.254", - "qosProfile":"5QI100", //Revisar el mapeo de los requisitos de la slice con esto - "EpApplicationRef":["EP_F1U DU1"] //Es un DNList (array de string) - }, - "EpTransport CU-UP1": - { - "IpAddress":"1.1.1.1", - "logicalInterfaceInfo":{ - "logicalInterfaceType":"VLAN", //VLAN, MPLS o Segment - "logicalInterfaceId":"100" - }, - "NextHopInfo": "1.1.1.254", - "QosProfile":"5QI100", - "EpApplicationRef":["EP_F1U CU-UP1"] //Es un DNList (array de string) - }, - "EP_F1U DU1":[ // El 3GPP parece que aun no ha definido las interfaces entre los distinos functional splits, por lo que estos objetos no están claros. Suponemos EP_F1U para todo, que es el que se usa para la interfaz F1-U entre gNB-DU y gNB-CU - { - "localAddress":"100.1.1.2", - "remoteAddress":"1.1.1.2", - "epTransportRef":["EpTransport DU1"] //Es un DNList (array de string) - } - ], - "EP_F1U CU-UP1":[ //Otras opciones son EP_N3 (interfaz N3 entre RAN y UPF) y EP_NgU (interfaz NG-U entre gNB y UPF) - { - "localAddress":"1.1.1.2", - "remoteAddress":"100.1.1.2", - "epTransportRef":["EpTransport CU-UP1"] //Es un DNList (array de string) - } - ] -} - - - diff --git a/src/templates/L2-VPN_template_example.json b/src/templates/L2-VPN_template_example.json deleted file mode 100644 index 2d6af09..0000000 --- a/src/templates/L2-VPN_template_example.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "services":[ - { - "service_id":{ - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "service_uuid":{ - "uuid":"l2-acl-svc-17429923732568250765476542" - } - }, - "service_type":2, - "service_status":{ - "service_status":1 - }, - "service_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"eth0" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"eth0" - } - } - ], - "service_constraints":[ - { - "custom":{ - "constraint_type":"bandwidth[kbps]", - "constraint_value":"20" - } - }, - { - "custom":{ - "constraint_type":"latency[ms]", - "constraint_value":"20" - } - } - ], - "service_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"/settings", - "resource_value":{ - - } - } - }, - { - "action":1, - "custom":{ - "resource_key":"/device[1.1.1.1]/endpoint[eth0]/settings", - "resource_value":{ - "sub_interface_index":0, - "vlan_id":100, - "circuit_id":"100", - "remote_router":"3.3.3.3", - "ni_name":"ELAN100" - } - } - }, - { - "action":1, - "custom":{ - "resource_key":"/device[3.3.3.3]/endpoint[eth0]/settings", - "resource_value":{ - "sub_interface_index":0, - "vlan_id":100, - "circuit_id":"100", - "remote_router":"1.1.1.1", - "ni_name":"ELAN100" - } - } - } - ] - } - } - ] -} \ No newline at end of file diff --git a/src/templates/L2-VPN_template_filled.json b/src/templates/L2-VPN_template_filled.json deleted file mode 100644 index 594fc27..0000000 --- a/src/templates/L2-VPN_template_filled.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "services": [ - { - "service_id": { - "context_id": {"context_uuid": {"uuid": "admin"}}, //Siempre usaremos admin - "service_uuid": {"uuid": "l2-acl-svc"} //identificador unico - }, - "service_type": 2, // Numero que identifica que es una vpn de nivel 2, se mantiene - "service_status": {"service_status": 1}, - "service_endpoint_ids": [ - {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}}, // Se tiene que cambiar por el endpoint de origen - {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}} // Se tiene que cambiar por el endpoint de destino - ], - "service_constraints": [ //Requerimientos que han de darse, de momento no funciona por lo que mantener igual - {"custom": {"constraint_type": "bandwidth[kbps]", "constraint_value": "10.0"}}, - {"custom": {"constraint_type": "latency[ms]", "constraint_value": "15.2"}} - ], - "service_config": {"config_rules": [ - {"action": 1, "custom": {"resource_key": "/settings", "resource_value": { //Regla default, se mantiene - }}}, - {"action": 1, "custom": {"resource_key": "/device[R149]/endpoint[eth-1/0/21]/settings", "resource_value": { //Camino de ida, hay que cambiar la vlan, circuit_id y sub_interface_index por el valor de vlan que queramos usar - "sub_interface_index": 0, - "vlan_id": 999, - "circuit_id": "999", - "remote_router":"5.5.5.1" // Este valor es la ip del router en el otro extremo - }}}, - {"action": 1, "custom": {"resource_key": "/device[R155]/endpoint[eth-1/0/21]/settings", "resource_value": { //Camino de vuelta, hay que cambiar la vlan, circuit_id y sub_interface_index por el valor de vlan que queramos usar - "sub_interface_index": 0, - "vlan_id": 999, - "circuit_id": "999", - "remote_router":"5.5.5.5" // Este valor es la ip del router en el otro extremo - }}} - ]} - } - ] -} \ No newline at end of file diff --git a/src/templates/L3-VPN_template_example.json b/src/templates/L3-VPN_template_example.json deleted file mode 100644 index b4334e9..0000000 --- a/src/templates/L3-VPN_template_example.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "service_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "service_uuid": { - "uuid": "l3-acl-svc-17536941472398060" - } - }, - "service_type": 1, - "service_status": { - "service_status": 1 - }, - "service_endpoint_ids": [ - { - "device_id": { - "device_uuid": { - "uuid": "10.10.10.10" - } - }, - "endpoint_uuid": { - "uuid": "0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id": { - "device_uuid": { - "uuid": "11.11.11.11" - } - }, - "endpoint_uuid": { - "uuid": "0/0/0-GigabitEthernet0/0/0/0" - } - } - ], - "service_constraints": [ - { - "custom": { - "constraint_type": "one-way-bandwidth[Mbps]", - "constraint_value": "10" - } - }, - { - "custom": { - "constraint_type": "one-way-delay-maximum[milliseconds]", - "constraint_value": "30" - } - } - ], - "service_config": { - "config_rules": [ - { - "action": 1, - "custom": { - "resource_key": "/settings", - "resource_value": { - "bgp_as": 65000, - "route_distinguisher": "65000:533" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[10.10.10.10]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", - "resource_value": { - "router_id": "11.11.11.11", - "sub_interface_index": 0, - "vlan_id": 200, - "address_ip": "11.11.11.11", - "address_prefix": 16, - "policy_AZ": "policyA", - "policy_ZA": "policyB", - "ni_name": "ELAN200" - } - } - }, - { - "action": 1, - "custom": { - "resource_key": "/device[11.11.11.11]/endpoint[0/0/0-GigabitEthernet0/0/0/0]/settings", - "resource_value": { - "router_id": "10.10.10.10", - "sub_interface_index": 0, - "vlan_id": 200, - "address_ip": "10.10.10.10", - "address_prefix": 16, - "policy_AZ": "policyA", - "policy_ZA": "policyB", - "ni_name": "ELAN200" - } - } - } - ] - } -} \ No newline at end of file diff --git a/src/templates/L3-VPN_template_filled.json b/src/templates/L3-VPN_template_filled.json deleted file mode 100644 index 12bea2a..0000000 --- a/src/templates/L3-VPN_template_filled.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "servs": [ - { - "service_id": { - "context_id": {"context_uuid": {"uuid": "admin"}}, //Siempre usaremos admin - "service_uuid": {"uuid": "l3-svc"} //identificador unico - }, - "service_type": 1, // Numero que identifica que es una vpn de nivel 3, se mantiene - "service_status": {"service_status": 1}, - "service_endpoint_ids": [ - {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}, // Se tiene que cambiar por el endpoint de origen - {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}} // Se tiene que cambiar por el endpoint de destino - ], - "service_constraints": [ // Requerimientos que han de darse, de momento no funciona por lo que mantener igual - {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}}, - {"custom": {"constraint_type": "latency[ms]", "constraint_value": "15.2"}} - ], - "service_config": {"config_rules": [ - {"action": 1, "custom": {"resource_key": "/settings", "resource_value": { //Regla default, se mantiene - "bgp_as" : 65000, - "route_distinguisher": "65000:533" - }}}, - {"action": 1, "custom": {"resource_key": "/device[R149]/endpoint[eth-1/0/20]/settings", "resource_value": { - "router_id" : "5.5.5.5", - "sub_interface_index": 0, - "vlan_id" : 533, - "address_ip" : "172.16.12.12", - "address_prefix" : 16, - "policy_AZ" : "srv_ACL", - "policy_ZA" : "srv_ACLr" - }}}, - {"action": 1, "custom": {"resource_key": "/device[R155]/endpoint[eth-1/0/20]/settings", "resource_value": { - "router_id" : "5.5.5.1", - "sub_interface_index": 0, - "vlan_id" : 533, - "address_ip" : "172.16.13.13", - "address_prefix" : 16, - "policy_AZ" : "srv_ACLr", - "policy_ZA" : "srv_ACL" - }}} - ]} - } - ] -} \ No newline at end of file diff --git a/src/templates/descriptor-topology copy.json b/src/templates/descriptor-topology copy.json deleted file mode 100644 index 304373a..0000000 --- a/src/templates/descriptor-topology copy.json +++ /dev/null @@ -1,570 +0,0 @@ -{ - "dummy_mode": true, - "contexts":[ - { - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_ids":[ - - ], - "service_ids":[ - - ] - } - ], - "topologies":[ - { - "topology_id":{ - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_uuid":{ - "uuid":"admin" - } - }, - "device_ids":[ - { - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - { - "device_uuid":{ - "uuid":"2.2.2.2" - } - } - ], - "link_ids":[ - { - "link_uuid":{ - "uuid":"4.4.4.4/0/0/1-GigabitEthernet0/0/0/1==2.2.2.2/GigabitEthernet2" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet2==4.4.4.4/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet1==1.1.1.1/GigabitEthernet1" - } - }, - { - "link_uuid":{ - "uuid":"1.1.1.1/GigabitEthernet1==2.2.2.2/GigabitEthernet1" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet4==5.5.5.5/0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/GigabitEthernet4" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet3==3.3.3.3/0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "link_uuid":{ - "uuid":"3.3.3.3/0/0/3-GigabitEthernet0/0/0/3==2.2.2.2/GigabitEthernet3" - } - }, - { - "link_uuid":{ - "uuid":"1.1.1.1/GigabitEthernet2==5.5.5.5/0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/2-GigabitEthernet0/0/0/2==1.1.1.1/GigabitEthernet2" - } - } - ] - } - ], - "devices":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.60.125.41" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - }, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet1]", "resource_value": { - "uuid": "GigabitEthernet1", "name": "GigabitEthernet1", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet2]", "resource_value": { - "uuid": "GigabitEthernet2", "name": "GigabitEthernet2", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet3]", "resource_value": { - "uuid": "GigabitEthernet3", "name": "GigabitEthernet3", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet4]", "resource_value": { - "uuid": "GigabitEthernet4", "name": "GigabitEthernet4", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet5]", "resource_value": { - "uuid": "GigabitEthernet5", "name": "GigabitEthernet5", "type": "-" - }}} - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - {"name": "GigabitEthernet1", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "1.1.1.1"}}, "endpoint_uuid": {"uuid": "GigabitEthernet1"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet2", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "1.1.1.1"}}, "endpoint_uuid": {"uuid": "GigabitEthernet2"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet3", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "1.1.1.1"}}, "endpoint_uuid": {"uuid": "GigabitEthernet3"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet4", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "1.1.1.1"}}, "endpoint_uuid": {"uuid": "GigabitEthernet4"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet5", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "1.1.1.1"}}, "endpoint_uuid": {"uuid": "GigabitEthernet5"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }} - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.60.125.42" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - }, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet1]", "resource_value": { - "uuid": "GigabitEthernet1", "name": "GigabitEthernet1", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet2]", "resource_value": { - "uuid": "GigabitEthernet2", "name": "GigabitEthernet2", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet3]", "resource_value": { - "uuid": "GigabitEthernet3", "name": "GigabitEthernet3", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet4]", "resource_value": { - "uuid": "GigabitEthernet4", "name": "GigabitEthernet4", "type": "-" - }}}, - {"action": 1, "custom": {"resource_key": "/endpoints/endpoint[GigabitEthernet5]", "resource_value": { - "uuid": "GigabitEthernet5", "name": "GigabitEthernet5", "type": "-" - }}} - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - {"name": "GigabitEthernet1", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "2.2.2.2"}}, "endpoint_uuid": {"uuid": "GigabitEthernet1"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet2", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "2.2.2.2"}}, "endpoint_uuid": {"uuid": "GigabitEthernet2"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet3", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "2.2.2.2"}}, "endpoint_uuid": {"uuid": "GigabitEthernet3"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet4", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "2.2.2.2"}}, "endpoint_uuid": {"uuid": "GigabitEthernet4"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }}, - {"name": "GigabitEthernet5", "endpoint_type": "-", "endpoint_id": { - "device_id": {"device_uuid": {"uuid": "2.2.2.2"}}, "endpoint_uuid": {"uuid": "GigabitEthernet5"}, - "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} - }} - ] - } - ], - "links":[ - { - "link_id":{ - "link_uuid":{ - "uuid":"4.4.4.4/0/0/1-GigabitEthernet0/0/0/1==2.2.2.2/GigabitEthernet2" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet2" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet2==4.4.4.4/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet2" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet1==1.1.1.1/GigabitEthernet1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"1.1.1.1/GigabitEthernet1==2.2.2.2/GigabitEthernet1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet4==5.5.5.5/0/0/0-GigabitEthernet0/0/0/0" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet4" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/GigabitEthernet4" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet4" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/GigabitEthernet3==3.3.3.3/0/0/3-GigabitEthernet0/0/0/3" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet3" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"3.3.3.3/0/0/3-GigabitEthernet0/0/0/3==2.2.2.2/GigabitEthernet3" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet3" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"1.1.1.1/GigabitEthernet2==5.5.5.5/0/0/2-GigabitEthernet0/0/0/2" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet2" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/2-GigabitEthernet0/0/0/2==1.1.1.1/GigabitEthernet2" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"GigabitEthernet2" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/templates/descriptor-topology-tid.json b/src/templates/descriptor-topology-tid.json deleted file mode 100644 index 588d9e9..0000000 --- a/src/templates/descriptor-topology-tid.json +++ /dev/null @@ -1,752 +0,0 @@ -{ - "contexts":[ - { - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_ids":[ - - ], - "service_ids":[ - - ] - } - ], - "topologies":[ - { - "topology_id":{ - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_uuid":{ - "uuid":"admin" - } - }, - "device_ids":[ - { - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - { - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - { - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - { - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - { - "device_uuid":{ - "uuid":"5.5.5.5" - } - } - ], - "link_ids":[ - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/1-GigabitEthernet0/0/0/1==3.3.3.3/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"3.3.3.3/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/2-GigabitEthernet0/0/0/2==1.1.1.1/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"1.1.1.1/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/0/0/2-GigabitEthernet0/0/0/2==5.5.5.5/0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "link_uuid":{ - "uuid":"3.3.3.3/0/0/3-GigabitEthernet0/0/0/3==2.2.2.2/0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/0/0/3-GigabitEthernet0/0/0/3==3.3.3.3/0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "link_uuid":{ - "uuid":"1.1.1.1/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/0/0/0-GigabitEthernet0/0/0/0==1.1.1.1/0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "link_uuid":{ - "uuid":"4.4.4.4/0/0/1-GigabitEthernet0/0/0/1==2.2.2.2/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"2.2.2.2/0/0/1-GigabitEthernet0/0/0/1==4.4.4.4/0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - } - ], - "devices":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.95.90.41" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.95.90.42" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.95.90.43" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.95.90.44" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.95.90.45" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - } - ], - "links":[ - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/1-GigabitEthernet0/0/0/1==3.3.3.3/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"3.3.3.3/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/2-GigabitEthernet0/0/0/2==1.1.1.1/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"1.1.1.1/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/2-GigabitEthernet0/0/0/2" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/0/0/2-GigabitEthernet0/0/0/2" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/0/0/2-GigabitEthernet0/0/0/2==5.5.5.5/0/0/0-GigabitEthernet0/0/0/0" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/2-GigabitEthernet0/0/0/2" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"3.3.3.3/0/0/3-GigabitEthernet0/0/0/3==2.2.2.2/0/0/3-GigabitEthernet0/0/0/3" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/0/0/3-GigabitEthernet0/0/0/3==3.3.3.3/0/0/3-GigabitEthernet0/0/0/3" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/3-GigabitEthernet0/0/0/3" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"1.1.1.1/0/0/0-GigabitEthernet0/0/0/0==2.2.2.2/0/0/0-GigabitEthernet0/0/0/0" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/0/0/0-GigabitEthernet0/0/0/0==1.1.1.1/0/0/0-GigabitEthernet0/0/0/0" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"1.1.1.1" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/0-GigabitEthernet0/0/0/0" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"4.4.4.4/0/0/1-GigabitEthernet0/0/0/1==2.2.2.2/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"2.2.2.2/0/0/1-GigabitEthernet0/0/0/1==4.4.4.4/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"2.2.2.2" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/templates/descriptor-topology.json b/src/templates/descriptor-topology.json deleted file mode 100644 index e22737b..0000000 --- a/src/templates/descriptor-topology.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "contexts":[ - { - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_ids":[ - - ], - "service_ids":[ - - ] - } - ], - "topologies":[ - { - "topology_id":{ - "context_id":{ - "context_uuid":{ - "uuid":"admin" - } - }, - "topology_uuid":{ - "uuid":"admin" - } - }, - "device_ids":[ - { - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - { - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - { - "device_uuid":{ - "uuid":"5.5.5.5" - } - } - ], - "link_ids":[ - { - "link_uuid":{ - "uuid":"5.5.5.5/0/0/1-GigabitEthernet0/0/0/1==3.3.3.3/0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "link_uuid":{ - "uuid":"3.3.3.3/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - } - ], - "devices":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.60.125.43" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"4.4.4.4" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.60.125.44" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "device_type":"packet-router", - "device_config":{ - "config_rules":[ - { - "action":1, - "custom":{ - "resource_key":"_connect/address", - "resource_value":"10.60.125.45" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/port", - "resource_value":"830" - } - }, - { - "action":1, - "custom":{ - "resource_key":"_connect/settings", - "resource_value":{ - "username":"cisco", - "password":"cisco12345", - "vendor":"CISCO", - "force_running":false, - "hostkey_verify":false, - "message_renderer":"pyangbind", - "look_for_keys":false, - "allow_agent":false, - "commit_per_rule":true, - "device_params":{ - "name":"default" - }, - "manager_params":{ - "timeout":120 - } - } - } - } - ] - }, - "device_operational_status":2, - "device_drivers":[ - 1 - ], - "device_endpoints":[ - - ] - } - ], - "links":[ - { - "link_id":{ - "link_uuid":{ - "uuid":"5.5.5.5/0/0/1-GigabitEthernet0/0/0/1==3.3.3.3/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - }, - { - "link_id":{ - "link_uuid":{ - "uuid":"3.3.3.3/0/0/1-GigabitEthernet0/0/0/1==5.5.5.5/0/0/1-GigabitEthernet0/0/0/1" - } - }, - "link_endpoint_ids":[ - { - "device_id":{ - "device_uuid":{ - "uuid":"3.3.3.3" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - }, - { - "device_id":{ - "device_uuid":{ - "uuid":"5.5.5.5" - } - }, - "endpoint_uuid":{ - "uuid":"0/0/1-GigabitEthernet0/0/0/1" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/templates/descriptor.json b/src/templates/descriptor.json deleted file mode 100644 index 4923ab4..0000000 --- a/src/templates/descriptor.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "contexts": [ - { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "topology_ids": [], - "service_ids": [] - } - ], - "topologies": [ - { - "topology_id": { - "context_id": { - "context_uuid": { - "uuid": "admin" - } - }, - "topology_uuid": { - "uuid": "admin" - } - } - } - ] - } \ No newline at end of file diff --git a/src/templates/ietf_template.json b/src/templates/ietf_template.json deleted file mode 100644 index 84e83cd..0000000 --- a/src/templates/ietf_template.json +++ /dev/null @@ -1,165 +0,0 @@ -[ - { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", - "description": "internet", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "Mbps", - "bound": 10 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 30 - }, - { - "metric-type": "one-way-delay-variation-maximum", - "metric-unit": "milliseconds", - "bound": 6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", - "description": "example 5G Slice mapping", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "10.10.10.10", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "10.10.10.10" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "5.5.5.5", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "source-node_destination-node", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - } -] \ No newline at end of file diff --git a/src/templates/ietf_template_example.json b/src/templates/ietf_template_example.json deleted file mode 100644 index 867776a..0000000 --- a/src/templates/ietf_template_example.json +++ /dev/null @@ -1,170 +0,0 @@ -[ - { - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "B", - "description": "", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "energy_consumption", - "metric-unit": "kWh", - "bound": 18000 - }, - { - "metric-type": "energy_efficiency", - "metric-unit": "Wats/bps", - "bound": 5 - }, - { - "metric-type": "carbon_emission", - "metric-unit": "grams of CO2 per kWh", - "bound": 650 - }, - { - "metric-type": "renewable_energy_usage", - "metric-unit": "rate", - "bound": 0.5 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-88a585f7-a432-4312-8774-6210fb0b2342", - "description": "Transport network slice mapped with 3GPP slice NetworkSlice1", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "B" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "A", - "geo-location": "", - "node-id": "CU-N32", - "sdp-ip-address": "10.60.11.3", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "10.60.11.3", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "4.4.4.4" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "B", - "geo-location": "", - "node-id": "UPF-N32", - "sdp-ip-address": "10.60.10.6", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "101", - "target-connection-group-id": "CU-N32_UPF-N32" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "10.60.10.6", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "CU-N32_UPF-N32", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "A" - }, - { - "sdp-id": "B" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } - } -] \ No newline at end of file diff --git a/src/templates/ietf_template_filled.json b/src/templates/ietf_template_filled.json deleted file mode 100644 index e7a525e..0000000 --- a/src/templates/ietf_template_filled.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "ietf-network-slice-service:network-slice-services":{ - "slo-sle-templates":{ - "slo-sle-template":[ - { - "id":"MidhaulId", - "slo-policy":{ - "metric-bound":[ - { - "metric-type":"one-way-bandwidth", - "metric-unit":"kbps", - "bound":300 - }, - { - "metric-type":"one-way-delay-maximum", - "metric-unit":"milliseconds", - "bound":1 - } - ] - }, - "sle-policy":{ - "security":[ - - ], - "isolation":[ - - ], - "steering-constraints":{ - "path-constraints":"", - "service-function":"" - } - } - } - ] - }, - "slice-service":[ - { - "id":"5GSliceMapping", - "description":"example 5G Slice mapping", - "slo-sle-template":"MidhaulId", - "status":{ - - }, - "sdps":{ - "sdp":[ - { - "id":"01", - "node-id":"DU1", - "sdp-ip-address":"1.1.1.2", - "service-match-criteria":{ - "match-criterion":[ - { - "index":1, - "match-type":"vlan-match", - "value":[ - "100" - ], - "target-connection-group-id":"DU-CU" - } - ] - }, - "sdp-peering":{ - "peer-sap-id":"", - "protocols":"" - }, - "ac-svc-name":[ - - ], - "attachment-circuits":{ - "attachment-circuit":[ - { - "id":"100", - "ac-ipv4-address":"1.1.1.1", - "ac-ipv4-prefix-length":0, - "sdp-peering":{ - "peer-sap-id":"1.1.1.254" - }, - "status":{ - - } - } - ] - }, - "status":{ - - } - }, - { - "id":"02", - "node-id":"CU-UP1", - "sdp-ip-address":"100.1.1.2", - "service-match-criteria":{ - "match-criterion":[ - { - "index":1, - "match-type":"vlan-match", - "value":[ - "100" - ], - "target-connection-group-id":"DU-CU" - } - ] - }, - "attachment-circuits":{ - "attachment-circuit":[ - { - "id":"200", - "ac-ipv4-address":"100.1.1.1", - "ac-ipv4-prefix-length":0, - "sdp-peering":{ - "peer-sap-id":"100.1.1.254" - }, - "status":{ - - } - } - ] - }, - "status":{ - - } - } - ] - }, - "connection-groups":{ - "connection-group":[ - { - "id":"DU-CU", - "connectivity-type":"ietf-vpn-common:any-to-any", - "connectivity-construct":[ - { - "id":1, - "a2a-sdp":[ - { - "sdp-id":"01" - }, - { - "sdp-id":"02" - } - ] - } - ], - "status":{ - - } - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/src/templates/ips.json b/src/templates/ips.json deleted file mode 100644 index c041c4c..0000000 --- a/src/templates/ips.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "CU":[ - {"prefix":"100.1.1.2", "node-name":"CU-UP1" }, - {"prefix":"100.1.2.2", "node-name":"CU-UP2" } - ], - "DU":[ - {"prefix":"1.1.1.2", "node-name":"DU1" }, - {"prefix":"1.1.2.2", "node-name":"DU2" }, - {"prefix":"1.1.3.2", "node-name":"DU3" } - ], - "public-prefixes":[ - {"prefix":"10.95.90.125", "node-name":"HL5-2-2" }, - {"prefix":"10.95.90.126", "node-name":"HL5-1-2" }, - {"prefix":"10.95.86.167", "node-name":"HL5-3-2" }, - {"prefix":"10.95.86.107", "node-name":"HL4-1-2" }, - {"prefix":"10.95.90.85", "node-name":"HL4-2-2" } - ] -} diff --git a/src/templates/nbi_template.json b/src/templates/nbi_template.json deleted file mode 100644 index 5b992a1..0000000 --- a/src/templates/nbi_template.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "ietf-network-slice-service:network-slice-services": { - "slo-sle-templates": { - "slo-sle-template": [ - { - "id": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b", - "description": "internet", - "slo-policy": { - "metric-bound": [ - { - "metric-type": "one-way-bandwidth", - "metric-unit": "Mbps", - "bound": 10 - }, - { - "metric-type": "one-way-delay-maximum", - "metric-unit": "milliseconds", - "bound": 30 - }, - { - "metric-type": "one-way-delay-variation-maximum", - "metric-unit": "milliseconds", - "bound": 6 - } - ] - }, - "sle-policy": { - "security": "", - "isolation": "", - "path-constraints": { - "service-functions": "", - "diversity": { - "diversity": { - "diversity-type": "" - } - } - } - } - } - ] - }, - "slice-service": [ - { - "id": "slice-service-ed8b5aa0-e96a-4b37-8fdb-fadcd641b87b", - "description": "example 5G Slice mapping", - "service-tags": { - "tag-type": { - "tag-type": "", - "value": "" - } - }, - "slo-sle-policy": { - "slo-sle-template": "qos-profile-14db3b7b-e31e-4f7c-bd32-83572ad0498b" - }, - "status": {}, - "sdps": { - "sdp": [ - { - "id": "", - "geo-location": "", - "node-id": "source-node", - "sdp-ip-address": "10.10.10.10", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "100", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "10.10.10.10" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - }, - { - "id": "", - "geo-location": "", - "node-id": "destination-node", - "sdp-ip-address": "5.5.5.5", - "tp-ref": "", - "service-match-criteria": { - "match-criterion": [ - { - "index": 1, - "match-type": "VLAN", - "value": "12", - "target-connection-group-id": "" - } - ] - }, - "incoming-qos-policy": "", - "outgoing-qos-policy": "", - "sdp-peering": { - "peer-sap-id": "", - "protocols": "" - }, - "ac-svc-ref": [], - "attachment-circuits": { - "attachment-circuit": [ - { - "id": "200", - "ac-ipv4-address": "", - "ac-ipv4-prefix-length": 0, - "sdp-peering": { - "peer-sap-id": "5.5.5.5" - }, - "status": {} - } - ] - }, - "status": {}, - "sdp-monitoring": "" - } - ] - }, - "connection-groups": { - "connection-group": [ - { - "id": "source-node_destination-node", - "connectivity-type": "ietf-vpn-common:any-to-any", - "connectivity-construct": [ - { - "id": 1, - "a2a-sdp": [ - { - "sdp-id": "01" - }, - { - "sdp-id": "02" - } - ] - } - ], - "status": {} - } - ] - } - } - ] - } -} \ No newline at end of file diff --git a/src/templates/realizer_template.json b/src/templates/realizer_template.json deleted file mode 100644 index 265a1e4..0000000 --- a/src/templates/realizer_template.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "services": [ - { - "src_node_ip": "10.10.10.10", - "dst_node_ip": "5.5.5.5", - "vlan_id": "12", - "bandwidth": 10, - "latency": 30, - "tolerance": 6, - "latency_version": "internet", - "reliability": null - } - ] -} \ No newline at end of file -- GitLab From 4b4ae60160daa6c1e12ab2ad325e130ac62f557f Mon Sep 17 00:00:00 2001 From: rahhal Date: Thu, 26 Jun 2025 09:45:52 +0000 Subject: [PATCH 09/14] Challanege 1 - Use NBI instead of uploading templates to webui --- src/Constants.py | 1 + src/helpers.py | 22 ++++++++-------------- src/network_slice_controller.py | 8 +++++--- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/Constants.py b/src/Constants.py index 62ec457..7fd1dae 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -50,6 +50,7 @@ PCE_EXTERNAL = False DUMMY_MODE = True # Teraflow IP TFS_IP = ips.get('TFS_IP') +path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False # IXIA NEII IP diff --git a/src/helpers.py b/src/helpers.py index 080238e..df4a30f 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -26,24 +26,18 @@ logging.basicConfig( #Teraflow class tfs_connector(): - def simple_post(self, tfs_ip, service): + def simple_post(self, tfs_ip, service, path): user="admin" password="admin" token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://{tfs_ip}/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if("csrf_token" in str(item)): - string=str(item).split(' Date: Mon, 25 Aug 2025 14:50:10 +0200 Subject: [PATCH 10/14] Modify code to support both webui and nbi TFS uploads --- src/Constants.py | 7 +-- src/helpers.py | 34 +++++++++--- src/network_slice_controller.py | 75 ++++++++++++++------------- src/templates/ietfL2VPN_template.json | 66 +++++++++++------------ 4 files changed, 101 insertions(+), 81 deletions(-) diff --git a/src/Constants.py b/src/Constants.py index 7fd1dae..fee596b 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -17,7 +17,7 @@ import logging, os, json # Default logging level -DEFAULT_LOGGING_LEVEL = logging.DEBUG +DEFAULT_LOGGING_LEVEL = logging.INFO # Default port for NSC deployment NSC_PORT = 8081 @@ -47,10 +47,11 @@ PCE_EXTERNAL = False # Controller Flags # If True, config is not sent to controllers -DUMMY_MODE = True +DUMMY_MODE = False # Teraflow IP TFS_IP = ips.get('TFS_IP') -path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" +UPLOAD_TYPE = "NBI" # "WEBUI" or "NBI" +NBI_L2_PATH = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False # IXIA NEII IP diff --git a/src/helpers.py b/src/helpers.py index df4a30f..0e15079 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -26,18 +26,40 @@ logging.basicConfig( #Teraflow class tfs_connector(): - def simple_post(self, tfs_ip, service, path): + def webui_post(self, tfs_ip, service): user="admin" password="admin" token="" + session = requests.Session() + session.auth = (user, password) + url=f'http://{tfs_ip}/webui' + response=session.get(url=url) + for item in response.iter_lines(): + if("csrf_token" in str(item)): + string=str(item).split(' Date: Thu, 26 Jun 2025 10:05:08 +0000 Subject: [PATCH 11/14] =?UTF-8?q?Challenge=20#3=20=E2=80=93=20L2VPN=20Supp?= =?UTF-8?q?ort=20-=20Change=20L2VPN=20realizer=20to=20use=20IETF=20L2NM=20?= =?UTF-8?q?YANG=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- our-temp/ietf-l3vpn-service.json | 83 +++++++++++++++++++++++++ src/Constants.py | 4 +- src/helpers.py | 42 ++++++++----- src/network_slice_controller.py | 103 ++++++++++++++++--------------- src/templates/l2vpn_request.json | 34 ++++++++++ 5 files changed, 199 insertions(+), 67 deletions(-) create mode 100644 our-temp/ietf-l3vpn-service.json create mode 100644 src/templates/l2vpn_request.json diff --git a/our-temp/ietf-l3vpn-service.json b/our-temp/ietf-l3vpn-service.json new file mode 100644 index 0000000..9eb70db --- /dev/null +++ b/our-temp/ietf-l3vpn-service.json @@ -0,0 +1,83 @@ +{ + "ietf-l3vpn-svc:l3vpn-svc": { + "vpn-services": {"vpn-service": [{"vpn-id": "ietf-l3vpn-svc"}]}, + "sites": { + "site": [ + { + "site-id": "site_DC1", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC1"}]}, + "devices": {"device": [{"device-id": "dc1", "location": "DC1"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "eth1", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "dc1", + "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.1.1", + "customer-address": "192.168.1.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 10}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + }, + { + "site-id": "site_DC2", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC2"}]}, + "devices": {"device": [{"device-id": "dc2", "location": "DC2"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "eth1", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "dc2", + "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.2.1", + "customer-address": "192.168.2.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1000000000, + "svc-output-bandwidth": 1000000000, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 10}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + } + ] + } + } +} diff --git a/src/Constants.py b/src/Constants.py index fee596b..e038b5b 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This file is an original contribution from Telefonica Innovación Digital S.L. +# This file includes original contributions from Telefonica Innovación Digital S.L. import logging, os, json diff --git a/src/helpers.py b/src/helpers.py index 0e15079..928a6b5 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL +from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -30,20 +31,33 @@ class tfs_connector(): user="admin" password="admin" token="" - session = requests.Session() - session.auth = (user, password) - url=f'http://{tfs_ip}/webui' - response=session.get(url=url) - for item in response.iter_lines(): - if("csrf_token" in str(item)): - string=str(item).split(' Date: Tue, 26 Aug 2025 12:28:14 +0200 Subject: [PATCH 12/14] Modify code to realize l2vpn slices depending on the flag (webUI or NBI) --- our-temp/ietf-l3vpn-service.json | 83 -------- src/Constants.py | 12 +- src/helpers.py | 42 ++-- src/network_slice_controller.py | 128 ++++++------ ...ate.json => ietfL2VPN_template_empty.json} | 16 +- src/templates/ietfL3VPN_template.json | 184 ------------------ src/templates/l2vpn_request.json | 34 ---- 7 files changed, 100 insertions(+), 399 deletions(-) delete mode 100644 our-temp/ietf-l3vpn-service.json rename src/templates/{ietfL2VPN_template.json => ietfL2VPN_template_empty.json} (58%) delete mode 100644 src/templates/ietfL3VPN_template.json delete mode 100644 src/templates/l2vpn_request.json diff --git a/our-temp/ietf-l3vpn-service.json b/our-temp/ietf-l3vpn-service.json deleted file mode 100644 index 9eb70db..0000000 --- a/our-temp/ietf-l3vpn-service.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "ietf-l3vpn-svc:l3vpn-svc": { - "vpn-services": {"vpn-service": [{"vpn-id": "ietf-l3vpn-svc"}]}, - "sites": { - "site": [ - { - "site-id": "site_DC1", - "management": {"type": "ietf-l3vpn-svc:provider-managed"}, - "locations": {"location": [{"location-id": "DC1"}]}, - "devices": {"device": [{"device-id": "dc1", "location": "DC1"}]}, - "site-network-accesses": { - "site-network-access": [ - { - "site-network-access-id": "eth1", - "site-network-access-type": "ietf-l3vpn-svc:multipoint", - "device-reference": "dc1", - "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"}, - "ip-connection": { - "ipv4": { - "address-allocation-type": "ietf-l3vpn-svc:static-address", - "addresses": { - "provider-address": "192.168.1.1", - "customer-address": "192.168.1.10", - "prefix-length": 24 - } - } - }, - "service": { - "svc-mtu": 1500, - "svc-input-bandwidth": 1000000000, - "svc-output-bandwidth": 1000000000, - "qos": {"qos-profile": {"classes": {"class": [{ - "class-id": "qos-realtime", - "direction": "ietf-l3vpn-svc:both", - "latency": {"latency-boundary": 10}, - "bandwidth": {"guaranteed-bw-percent": 100} - }]}}} - } - } - ] - } - }, - { - "site-id": "site_DC2", - "management": {"type": "ietf-l3vpn-svc:provider-managed"}, - "locations": {"location": [{"location-id": "DC2"}]}, - "devices": {"device": [{"device-id": "dc2", "location": "DC2"}]}, - "site-network-accesses": { - "site-network-access": [ - { - "site-network-access-id": "eth1", - "site-network-access-type": "ietf-l3vpn-svc:multipoint", - "device-reference": "dc2", - "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"}, - "ip-connection": { - "ipv4": { - "address-allocation-type": "ietf-l3vpn-svc:static-address", - "addresses": { - "provider-address": "192.168.2.1", - "customer-address": "192.168.2.10", - "prefix-length": 24 - } - } - }, - "service": { - "svc-mtu": 1500, - "svc-input-bandwidth": 1000000000, - "svc-output-bandwidth": 1000000000, - "qos": {"qos-profile": {"classes": {"class": [{ - "class-id": "qos-realtime", - "direction": "ietf-l3vpn-svc:both", - "latency": {"latency-boundary": 10}, - "bandwidth": {"guaranteed-bw-percent": 100} - }]}}} - } - } - ] - } - } - ] - } - } -} diff --git a/src/Constants.py b/src/Constants.py index 39a51bd..b05deea 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2025 Telefonica Innovación Digital S.L. +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,6 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +# This file includes original contributions from Telefonica Innovación Digital S.L. + +import logging, os, json + # Default logging level DEFAULT_LOGGING_LEVEL = logging.INFO @@ -44,12 +48,16 @@ PCE_EXTERNAL = False # Controller Flags # If True, config is not sent to controllers DUMMY_MODE = False + +#####TERAFLOW##### # Teraflow IP TFS_IP = ips.get('TFS_IP') -UPLOAD_TYPE = "NBI" # "WEBUI" or "NBI" +UPLOAD_TYPE = "WEBUI" # "WEBUI" or "NBI" NBI_L2_PATH = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False + +#####IXIA##### # IXIA NEII IP IXIA_IP = ips.get('IXIA_IP') diff --git a/src/helpers.py b/src/helpers.py index 928a6b5..0e15079 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,4 +1,4 @@ -# Copyright 2025 Telefonica Innovación Digital S.L. +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL -from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( @@ -31,33 +30,20 @@ class tfs_connector(): user="admin" password="admin" token="" - #session = requests.Session() - #session.auth = (user, password) - #url = f'http://{tfs_ip}/{path}' - url_l2 = f'http://{user}:{password}@{tfs_ip}/{path}' - #url_l3 = f'http://{user}:{password}@{tfs_ip}/{path_l3}' - logging.info(service) - #response=session.get(url=url) - #for item in response.iter_lines(): - # if("csrf_token" in str(item)): - # string=str(item).split(' Date: Thu, 26 Jun 2025 13:20:09 +0000 Subject: [PATCH 13/14] =?UTF-8?q?Challenge=20#4=20=E2=80=93L3VPN=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Constants.py | 7 ++++++- src/helpers.py | 3 ++- src/network_slice_controller.py | 34 +++++++++++++++++---------------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/Constants.py b/src/Constants.py index b05deea..1cd84dd 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -54,6 +54,11 @@ DUMMY_MODE = False TFS_IP = ips.get('TFS_IP') UPLOAD_TYPE = "WEBUI" # "WEBUI" or "NBI" NBI_L2_PATH = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" +#path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" +path_l3 = "restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" + +#json_file = "/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json" +#/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False diff --git a/src/helpers.py b/src/helpers.py index 0e15079..be052a8 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL +from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( diff --git a/src/network_slice_controller.py b/src/network_slice_controller.py index 34697b3..d64f955 100644 --- a/src/network_slice_controller.py +++ b/src/network_slice_controller.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2025 Telefonica Innovación Digital S.L. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -62,6 +62,8 @@ class NSController: self.controller_type = controller_type self.tfs_ip = tfs_ip self.path = path + self.path_l3 = path_l3 + #self.json_file = json_file self.answer = {} self.cool_answer = {} self.start_time = 0 @@ -498,6 +500,7 @@ class NSController: "setup_time": self.setup_time } # Add slice details to the response + logging.info(self.answer) for subnet in self.answer: slice_info = { "id": subnet, @@ -828,30 +831,29 @@ class NSController: logging.warning(f"Unsupported controller: {controller}. Defaulting to TFS L2VPN realization.") realizing_request = self.__tfs_l2vpn(ietf_intent) return realizing_request - def __tfs_l2vpn(self, ietf_intent): - """ - Translate slice intent into a TeraFlow service request. + """ + Translate slice intent into a TeraFlow service request. - This method prepares a L2VPN service request by: - 1. Defining endpoint routers - 2. Loading a service template - 3. Generating a unique service UUID - 4. Configuring service endpoints - 5. Adding QoS constraints - 6. Preparing configuration rules for network interfaces + This method prepares a L2VPN service request by: + 1. Defining endpoint routers + 2. Loading a service template + 3. Generating a unique service UUID + 4. Configuring service endpoints + 5. Adding QoS constraints + 6. Preparing configuration rules for network interfaces - Args: - ietf_intent (dict): IETF-formatted network slice intent. + Args: + ietf_intent (dict): IETF-formatted network slice intent. - Returns: - dict: A TeraFlow service request for L2VPN configuration. + Returns: + dict: A TeraFlow service request for L2VPN configuration. """ # Hardcoded router endpoints # TODO (should be dynamically determined) origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] - origin_router_if = '0/0/0-GigabitEthernet0/0/0/0' + origin_router_if = 'eth2' destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] destination_router_if = '0/0/0-GigabitEthernet0/0/0/0' -- GitLab From 8cef7eeb08caf1349d4f1cdd3b52b8d01132e151 Mon Sep 17 00:00:00 2001 From: velazquez Date: Wed, 27 Aug 2025 12:05:28 +0200 Subject: [PATCH 14/14] Modify code to realize l3vpn slices depending on the flag (webUI or NBI) --- src/Constants.py | 9 +- src/helpers.py | 5 +- src/network_slice_controller.py | 285 ++++++++++++-------- src/templates/ietfL3VPN_template_empty.json | 83 ++++++ 4 files changed, 263 insertions(+), 119 deletions(-) create mode 100644 src/templates/ietfL3VPN_template_empty.json diff --git a/src/Constants.py b/src/Constants.py index 2603e13..3b02ffd 100644 --- a/src/Constants.py +++ b/src/Constants.py @@ -1,5 +1,4 @@ -# Copyright 2025 Telefonica Innovación Digital S.L. -# Copyright 2025 Telefonica Innovación Digital S.L. +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -55,11 +54,7 @@ DUMMY_MODE = False TFS_IP = ips.get('TFS_IP') UPLOAD_TYPE = "WEBUI" # "WEBUI" or "NBI" NBI_L2_PATH = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" -#path = "restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services" -path_l3 = "restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" - -#json_file = "/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json" -#/home/tfs/nsc-hackfest7/src/hackfest7/slice_request.json +NBI_L3_PATH = "restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services" # Flag to determine if additional L2VPN configuration support is required for deploying L2VPNs with path selection TFS_L2VPN_SUPPORT = False diff --git a/src/helpers.py b/src/helpers.py index 04fc838..0e15079 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -1,5 +1,4 @@ -# Copyright 2025 Telefonica Innovación Digital S.L. -# Copyright 2025 Telefonica Innovación Digital S.L. +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,8 +17,6 @@ import logging, requests, json from netmiko import ConnectHandler from src.Constants import DEFAULT_LOGGING_LEVEL -from requests.auth import HTTPBasicAuth -from requests.auth import HTTPBasicAuth # Configure logging to provide clear and informative log messages logging.basicConfig( diff --git a/src/network_slice_controller.py b/src/network_slice_controller.py index 204c198..6ac7088 100644 --- a/src/network_slice_controller.py +++ b/src/network_slice_controller.py @@ -1,5 +1,4 @@ -# Copyright 2025 Telefonica Innovación Digital S.L. -# Copyright 2025 Telefonica Innovación Digital S.L. +# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,7 +17,7 @@ import json, time, os, logging, uuid, traceback, sys from datetime import datetime from src.helpers import tfs_connector, cisco_connector -from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_IP, TFS_L2VPN_SUPPORT, IXIA_IP, SRC_PATH, TEMPLATES_PATH, DUMMY_MODE, DUMP_TEMPLATES, PLANNER_ENABLED, NRP_ENABLED, UPLOAD_TYPE, NBI_L2_PATH +from src.Constants import DEFAULT_LOGGING_LEVEL, TFS_IP, TFS_L2VPN_SUPPORT, IXIA_IP, SRC_PATH, TEMPLATES_PATH, DUMMY_MODE, DUMP_TEMPLATES, PLANNER_ENABLED, NRP_ENABLED, UPLOAD_TYPE, NBI_L2_PATH, NBI_L3_PATH from src.realizers.ixia.NEII_V4 import NEII_controller from src.planner.planner import Planner @@ -43,7 +42,7 @@ class NSController: - Slice Realization: Convert intents to specific network configurations (L2VPN, L3VPN) """ - def __init__(self, controller_type = "TFS", tfs_ip=TFS_IP, ixia_ip =IXIA_IP, need_l2vpn_support=TFS_L2VPN_SUPPORT, path=NBI_L2_PATH): + def __init__(self, controller_type = "TFS", tfs_ip=TFS_IP, ixia_ip =IXIA_IP, need_l2vpn_support=TFS_L2VPN_SUPPORT): """ Initialize the Network Slice Controller. @@ -62,12 +61,7 @@ class NSController: """ self.controller_type = controller_type self.tfs_ip = tfs_ip - self.path = path - self.path_l3 = path_l3 - #self.json_file = json_file - self.path = path - self.path_l3 = path_l3 - #self.json_file = json_file + self.path = "" self.answer = {} self.cool_answer = {} self.start_time = 0 @@ -448,6 +442,7 @@ class NSController: else: # Select slice service method way = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["service-tags"]["tag-type"]["value"] + way = "L3VPN" return self.__select_way(controller=self.controller_type, way=way, ietf_intent=ietf_intent) ### Generic functionalities @@ -504,8 +499,6 @@ class NSController: "setup_time": self.setup_time } # Add slice details to the response - logging.info(self.answer) - logging.info(self.answer) for subnet in self.answer: slice_info = { "id": subnet, @@ -647,8 +640,8 @@ class NSController: metrics = { - ("uLThptPerSliceSubnet", "MaxThpt"): ("throughput", "kbps"), - ("uLLatency",): ("latency", "ms"), + ("uLThptPerSliceSubnet", "MaxThpt"): ("one-way-bandwidth", "kbps"), + ("uLLatency",): ("one-way-delay-maximum", "milliseconds"), ("EnergyConsumption",): ("energy_consumption", "Joules"), ("EnergyEfficiency",): ("energy_efficiency", "W/bps"), ("CarbonEmissions",): ("carbon_emission", "gCO2eq"), @@ -836,43 +829,30 @@ class NSController: logging.warning(f"Unsupported controller: {controller}. Defaulting to TFS L2VPN realization.") realizing_request = self.__tfs_l2vpn(ietf_intent) return realizing_request + def __tfs_l2vpn(self, ietf_intent): - """ - Translate slice intent into a TeraFlow service request. - """ - Translate slice intent into a TeraFlow service request. - - This method prepares a L2VPN service request by: - 1. Defining endpoint routers - 2. Loading a service template - 3. Generating a unique service UUID - 4. Configuring service endpoints - 5. Adding QoS constraints - 6. Preparing configuration rules for network interfaces - This method prepares a L2VPN service request by: - 1. Defining endpoint routers - 2. Loading a service template - 3. Generating a unique service UUID - 4. Configuring service endpoints - 5. Adding QoS constraints - 6. Preparing configuration rules for network interfaces - - Args: - ietf_intent (dict): IETF-formatted network slice intent. - Args: - ietf_intent (dict): IETF-formatted network slice intent. - - Returns: - dict: A TeraFlow service request for L2VPN configuration. - Returns: - dict: A TeraFlow service request for L2VPN configuration. + """ + Translate slice intent into a TeraFlow service request. + + This method prepares a L2VPN service request by: + 1. Defining endpoint routers + 2. Loading a service template + 3. Generating a unique service UUID + 4. Configuring service endpoints + 5. Adding QoS constraints + 6. Preparing configuration rules for network interfaces + + Args: + ietf_intent (dict): IETF-formatted network slice intent. + + Returns: + dict: A TeraFlow service request for L2VPN configuration. """ # Hardcoded router endpoints # TODO (should be dynamically determined) origin_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] - origin_router_if = 'eth2' - origin_router_if = 'eth2' + origin_router_if = '0/0/0-GigabitEthernet0/0/0/0' destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] destination_router_if = '0/0/0-GigabitEthernet0/0/0/0' @@ -881,20 +861,34 @@ class NSController: vlan_value = 0 self.answer[self.subnet]["QoS Requirements"] = [] - + # Populate response with QoS requirements and VLAN from intent - for i, constraint in enumerate(ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"]): - bound = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["bound"] - metric_type = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-type"] - metric_unit = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-unit"] - service_constraint ={ - "custom": { - "constraint_type": f"{metric_type}[{metric_unit}]", - "constraint_value": f"{bound}" - } - } - self.answer[self.subnet]["QoS Requirements"].append(service_constraint["custom"]) - + slo_policy = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"] + + # Process metrics + for metric in slo_policy.get("metric-bound", []): + constraint_type = f"{metric['metric-type']}[{metric['metric-unit']}]" + constraint_value = str(metric["bound"]) + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": constraint_type, + "constraint_value": constraint_value + }) + + # Availability + if "availability" in slo_policy: + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": "availability[%]", + "constraint_value": str(slo_policy["availability"]) + }) + + # MTU + if "mtu" in slo_policy: + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": "mtu[bytes]", + "constraint_value": str(slo_policy["mtu"]) + }) + + # VLAN vlan_value = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["value"] self.answer[self.subnet]["VLAN"] = vlan_value @@ -931,7 +925,7 @@ class NSController: config_rule["custom"]["resource_key"] = f"/device[{router_id}]/endpoint[{router_if}]/settings" elif UPLOAD_TYPE == "NBI": - + self.path = NBI_L2_PATH # Load IETF L2VPN service template self.__load_template(2, os.path.join(TEMPLATES_PATH, "ietfL2VPN_template_empty.json")) tfs_request = json.loads(str(self.__teraflow_template)) @@ -942,15 +936,16 @@ class NSController: tfs_request["ietf-l2vpn-svc:vpn-service"][0]["vpn-id"] = uuid_only # Configure service endpoints - for site in tfs_request["ietf-l2vpn-svc:vpn-service"][0]["site"]: - if site is tfs_request["ietf-l2vpn-svc:vpn-service"][0]["site"][0]: - site["site-id"] = origin_router_id - site["site-location"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["node-id"] - site["site-network-access"]["interface"]["ip-address"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["sdp-ip-address"] - else: - site["site-id"] = destination_router_id - site["site-location"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["node-id"] - site["site-network-access"]["interface"]["ip-address"] = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["sdp-ip-address"] + sites = tfs_request["ietf-l2vpn-svc:vpn-service"][0]["site"] + sdps = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"] + + for i, site in enumerate(sites): + is_origin = (i == 0) + router_id = origin_router_id if is_origin else destination_router_id + sdp = sdps[0] if is_origin else sdps[1] + site["site-id"] = router_id + site["site-location"] = sdp["node-id"] + site["site-network-access"]["interface"]["ip-address"] = sdp["sdp-ip-address"] logging.info(f"L2VPN Intent realized\n") return tfs_request @@ -1049,49 +1044,123 @@ class NSController: origin_router_if = '0/0/0-GigabitEthernet0/0/0/0' destination_router_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][1]["attachment-circuits"]["attachment-circuit"][0]["sdp-peering"]["peer-sap-id"] destination_router_if = '0/0/0-GigabitEthernet0/0/0/0' - - # Load L3VPN service template - self.__load_template(2, os.path.join(TEMPLATES_PATH, "L3-VPN_template_empty.json")) - tfs_request = json.loads(str(self.__teraflow_template))["services"][0] - - # Generate unique service UUID - tfs_request["service_id"]["service_uuid"]["uuid"] += "-" + str(int(datetime.now().timestamp() * 1e7)) - # Configure service endpoints - for endpoint in tfs_request["service_endpoint_ids"]: - endpoint["device_id"]["device_uuid"]["uuid"] = origin_router_id if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_id - endpoint["endpoint_uuid"]["uuid"] = origin_router_if if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_if + # Extract QoS Profile from intent + QoSProfile = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["id"] + vlan_value = 0 self.answer[self.subnet]["QoS Requirements"] = [] - # Add service constraints - for i, constraint in enumerate(ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"]): - bound = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["bound"] - metric_type = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-type"] - metric_unit = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"]["metric-bound"][i]["metric-unit"] - service_constraint ={ - "custom": { - "constraint_type": f"{metric_type}[{metric_unit}]", - "constraint_value": f"{bound}" - } - } - self.answer[self.subnet]["QoS Requirements"].append(service_constraint["custom"]) - tfs_request["service_constraints"].append(service_constraint) - - # Add configuration rules - for i, config_rule in enumerate(tfs_request["service_config"]["config_rules"][1:], start=1): - router_id = origin_router_id if i == 1 else destination_router_id - router_if = origin_router_if if i == 1 else destination_router_if - resource_value = config_rule["custom"]["resource_value"] - - sdp_index = i - 1 - vlan_value = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][sdp_index]["service-match-criteria"]["match-criterion"][0]["value"] - resource_value["router_id"] = destination_router_id if i == 1 else origin_router_id - resource_value["vlan_id"] = int(vlan_value) - resource_value["address_ip"] = destination_router_id if i == 1 else origin_router_id - resource_value["policy_AZ"] = "policyA" - resource_value["policy_ZA"] = "policyB" - resource_value["ni_name"] = 'ELAN{:s}'.format(str(vlan_value)) - config_rule["custom"]["resource_key"] = f"/device[{router_id}]/endpoint[{router_if}]/settings" + + # Populate response with QoS requirements and VLAN from intent + slo_policy = ietf_intent["ietf-network-slice-service:network-slice-services"]["slo-sle-templates"]["slo-sle-template"][0]["slo-policy"] + + # Process metrics + for metric in slo_policy.get("metric-bound", []): + constraint_type = f"{metric['metric-type']}[{metric['metric-unit']}]" + constraint_value = str(metric["bound"]) + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": constraint_type, + "constraint_value": constraint_value + }) + + # Availability + if "availability" in slo_policy: + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": "availability[%]", + "constraint_value": str(slo_policy["availability"]) + }) + + # MTU + if "mtu" in slo_policy: + self.answer[self.subnet]["QoS Requirements"].append({ + "constraint_type": "mtu[bytes]", + "constraint_value": str(slo_policy["mtu"]) + }) + + # VLAN + vlan_value = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][0]["service-match-criteria"]["match-criterion"][0]["value"] + self.answer[self.subnet]["VLAN"] = vlan_value + + if UPLOAD_TYPE == "WEBUI": + # Load L3VPN service template + self.__load_template(2, os.path.join(TEMPLATES_PATH, "L3-VPN_template_empty.json")) + tfs_request = json.loads(str(self.__teraflow_template))["services"][0] + + # Generate unique service UUID + tfs_request["service_id"]["service_uuid"]["uuid"] += "-" + str(int(datetime.now().timestamp() * 1e7)) + + # Configure service endpoints + for endpoint in tfs_request["service_endpoint_ids"]: + endpoint["device_id"]["device_uuid"]["uuid"] = origin_router_id if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_id + endpoint["endpoint_uuid"]["uuid"] = origin_router_if if endpoint is tfs_request["service_endpoint_ids"][0] else destination_router_if + + # Add service constraints + for constraint in self.answer[self.subnet]["QoS Requirements"]: + tfs_request["service_constraints"].append({"custom": constraint}) + + # Add configuration rules + for i, config_rule in enumerate(tfs_request["service_config"]["config_rules"][1:], start=1): + router_id = origin_router_id if i == 1 else destination_router_id + router_if = origin_router_if if i == 1 else destination_router_if + resource_value = config_rule["custom"]["resource_value"] + + sdp_index = i - 1 + vlan_value = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][sdp_index]["service-match-criteria"]["match-criterion"][0]["value"] + resource_value["router_id"] = destination_router_id if i == 1 else origin_router_id + resource_value["vlan_id"] = int(vlan_value) + resource_value["address_ip"] = destination_router_id if i == 1 else origin_router_id + resource_value["policy_AZ"] = "policyA" + resource_value["policy_ZA"] = "policyB" + resource_value["ni_name"] = 'ELAN{:s}'.format(str(vlan_value)) + config_rule["custom"]["resource_key"] = f"/device[{router_id}]/endpoint[{router_if}]/settings" + + elif UPLOAD_TYPE == "NBI": + self.path = NBI_L3_PATH + # Load IETF L3VPN service template + self.__load_template(2, os.path.join(TEMPLATES_PATH, "ietfL3VPN_template_empty.json")) + tfs_request = json.loads(str(self.__teraflow_template)) + + # Generate service UUID + full_id = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["id"] + tfs_request["ietf-l3vpn-svc:l3vpn-svc"]["vpn-services"]["vpn-service"][0]["vpn-id"] = full_id + # Configure service endpoints + for i, site in enumerate(tfs_request["ietf-l3vpn-svc:l3vpn-svc"]["sites"]["site"]): + + # Determine if origin or destination + is_origin = (i == 0) + sdp_index = 0 if is_origin else 1 + location = ietf_intent["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["sdps"]["sdp"][sdp_index]["node-id"] + router_id = origin_router_id if is_origin else destination_router_id + router_if = origin_router_if if is_origin else destination_router_if + + # Assign common values + site["site-id"] = f"site_{location}" + site["locations"]["location"][0]["location-id"] = location + site["devices"]["device"][0]["device-id"] = router_id + site["devices"]["device"][0]["location"] = location + + access = site["site-network-accesses"]["site-network-access"][0] + access["site-network-access-id"] = router_if + access["device-reference"] = router_id + access["vpn-attachment"]["vpn-id"] = full_id + + # Aplicar restricciones QoS + for constraint in self.answer[self.subnet]["QoS Requirements"]: + ctype = constraint["constraint_type"] + cvalue = float(constraint["constraint_value"]) + if constraint["constraint_type"].startswith("one-way-bandwidth"): + unit = constraint["constraint_type"].split("[")[-1].rstrip("]") + multiplier = {"bps": 1, "kbps": 1_000, "Mbps": 1_000_000, "Gbps": 1_000_000_000}.get(unit, 1) + value = int(cvalue * multiplier) + access["service"]["svc-input-bandwidth"] = value + access["service"]["svc-output-bandwidth"] = value + elif ctype == "one-way-delay-maximum[milliseconds]": + access["service"]["qos"]["qos-profile"]["classes"]["class"][0]["latency"]["latency-boundary"] = int(cvalue) + elif ctype == "availability[%]": + access["service"]["qos"]["qos-profile"]["classes"]["class"][0]["bandwidth"]["guaranteed-bw-percent"] = int(cvalue) + elif ctype == "mtu[bytes]": + access["service"]["svc-mtu"] = int(cvalue) + logging.info(f"L3VPN Intent realized\n") self.answer[self.subnet]["VLAN"] = vlan_value diff --git a/src/templates/ietfL3VPN_template_empty.json b/src/templates/ietfL3VPN_template_empty.json new file mode 100644 index 0000000..628abcb --- /dev/null +++ b/src/templates/ietfL3VPN_template_empty.json @@ -0,0 +1,83 @@ +{ + "ietf-l3vpn-svc:l3vpn-svc": { + "vpn-services": {"vpn-service": [{"vpn-id": ""}]}, + "sites": { + "site": [ + { + "site-id": "", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": ""}]}, + "devices": {"device": [{"device-id": "", "location": ""}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "", + "vpn-attachment": {"vpn-id": "", "site-role": "ietf-l3vpn-svc:spoke-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.1.1", + "customer-address": "192.168.1.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1, + "svc-output-bandwidth": 1, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 100}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + }, + { + "site-id": "", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": ""}]}, + "devices": {"device": [{"device-id": "", "location": ""}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "", + "vpn-attachment": {"vpn-id": "", "site-role": "ietf-l3vpn-svc:hub-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "192.168.2.1", + "customer-address": "192.168.2.10", + "prefix-length": 24 + } + } + }, + "service": { + "svc-mtu": 1500, + "svc-input-bandwidth": 1, + "svc-output-bandwidth": 1, + "qos": {"qos-profile": {"classes": {"class": [{ + "class-id": "qos-realtime", + "direction": "ietf-l3vpn-svc:both", + "latency": {"latency-boundary": 100}, + "bandwidth": {"guaranteed-bw-percent": 100} + }]}}} + } + } + ] + } + } + ] + } + } +} -- GitLab