From 32072654b9a13f7d37174067628da326a809790f Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Wed, 22 Dec 2021 16:35:56 +0100 Subject: [PATCH 001/890] Intermediate backup of Compute: - Implement WIM REST API for OSM - Implement IETFL2VPN REST API - Implement unitary tests for OSM-Compute-Service workflow --- run_tests_locally.sh | 72 +-- src/compute/Config.py | 2 +- src/compute/service/rest_server/Server.py | 11 +- src/compute/tests/MockServiceService.py | 45 ++ .../tests/MockServiceServiceServicerImpl.py | 28 + src/compute/tests/mock_osm/MockOSM.py | 47 ++ .../tests/mock_osm/WimconnectorIETFL2VPN.py | 499 ++++++++++++++++++ src/compute/tests/mock_osm/__init__.py | 0 .../tests/mock_osm/acknowledgements.txt | 3 + src/compute/tests/mock_osm/sdnconn.py | 242 +++++++++ src/compute/tests/test_unitary.py | 63 +-- 11 files changed, 930 insertions(+), 82 deletions(-) create mode 100644 src/compute/tests/MockServiceService.py create mode 100644 src/compute/tests/MockServiceServiceServicerImpl.py create mode 100644 src/compute/tests/mock_osm/MockOSM.py create mode 100644 src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py create mode 100644 src/compute/tests/mock_osm/__init__.py create mode 100644 src/compute/tests/mock_osm/acknowledgements.txt create mode 100644 src/compute/tests/mock_osm/sdnconn.py diff --git a/run_tests_locally.sh b/run_tests_locally.sh index b483de806..271e06851 100755 --- a/run_tests_locally.sh +++ b/run_tests_locally.sh @@ -19,46 +19,46 @@ cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PRO #kubectl --namespace tf-dev expose deployment contextservice --port=6379 --type=NodePort --name=redis-tests #echo "Waiting 10 seconds for Redis to start..." #sleep 10 -export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') -export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}') +#export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') +#export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}') # First destroy old coverage file rm -f $COVERAGEFILE -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - common/orm/tests/test_unitary.py \ - common/message_broker/tests/test_unitary.py \ - common/rpc_method_wrapper/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - centralizedattackdetector/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - context/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - device/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ - l3_centralizedattackdetector/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ - l3_distributedattackdetector/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ - l3_attackmitigator/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - opticalcentralizedattackdetector/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - dbscanserving/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - opticalattackmitigator/tests/test_unitary.py - -coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ - service/tests/test_unitary.py +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# common/orm/tests/test_unitary.py \ +# common/message_broker/tests/test_unitary.py \ +# common/rpc_method_wrapper/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# centralizedattackdetector/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# context/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# device/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ +# l3_centralizedattackdetector/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ +# l3_distributedattackdetector/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ +# l3_attackmitigator/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# opticalcentralizedattackdetector/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# dbscanserving/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# opticalattackmitigator/tests/test_unitary.py +# +#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ +# service/tests/test_unitary.py coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ compute/tests/test_unitary.py diff --git a/src/compute/Config.py b/src/compute/Config.py index e95740493..761ed10cb 100644 --- a/src/compute/Config.py +++ b/src/compute/Config.py @@ -10,7 +10,7 @@ GRPC_GRACE_PERIOD = 60 # REST-API settings RESTAPI_SERVICE_PORT = 8080 -RESTAPI_BASE_URL = '/api' +RESTAPI_BASE_URL = '/restconf/data/ietf-l2vpn-svc:l2vpn-svc' # Prometheus settings METRICS_PORT = 9192 diff --git a/src/compute/service/rest_server/Server.py b/src/compute/service/rest_server/Server.py index c68515e91..03212d4aa 100644 --- a/src/compute/service/rest_server/Server.py +++ b/src/compute/service/rest_server/Server.py @@ -1,14 +1,20 @@ -import logging, threading -from flask import Flask +import logging, threading, time +from flask import Flask, request from flask_restful import Api from werkzeug.serving import make_server from compute.Config import RESTAPI_BASE_URL, RESTAPI_SERVICE_PORT + logging.getLogger('werkzeug').setLevel(logging.WARNING) BIND_ADDRESS = '0.0.0.0' LOGGER = logging.getLogger(__name__) +def log_request(response): + timestamp = time.strftime('[%Y-%b-%d %H:%M]') + LOGGER.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status) + return response + class Server(threading.Thread): def __init__(self, host=BIND_ADDRESS, port=RESTAPI_SERVICE_PORT, base_url=RESTAPI_BASE_URL): threading.Thread.__init__(self, daemon=True) @@ -16,6 +22,7 @@ class Server(threading.Thread): self.port = port self.base_url = base_url self.app = Flask(__name__) + self.app.after_request(log_request) self.api = Api(self.app, prefix=self.base_url) def add_resource(self, resource, *urls, **kwargs): diff --git a/src/compute/tests/MockServiceService.py b/src/compute/tests/MockServiceService.py new file mode 100644 index 000000000..fe90aa4d8 --- /dev/null +++ b/src/compute/tests/MockServiceService.py @@ -0,0 +1,45 @@ +import grpc, logging +from concurrent import futures +from service.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD +from service.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server +from .MockServiceServiceServicerImpl import MockServiceServiceServicerImpl + +BIND_ADDRESS = '0.0.0.0' +LOGGER = logging.getLogger(__name__) + +class MockServiceService: + def __init__( + self, address=BIND_ADDRESS, port=GRPC_SERVICE_PORT, max_workers=GRPC_MAX_WORKERS, + grace_period=GRPC_GRACE_PERIOD): + + self.address = address + self.port = port + self.endpoint = None + self.max_workers = max_workers + self.grace_period = grace_period + self.service_servicer = None + self.pool = None + self.server = None + + def start(self): + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port)) + LOGGER.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format( + str(self.endpoint), str(self.max_workers))) + + self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers) + self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,)) + + self.service_servicer = MockServiceServiceServicerImpl() + add_ServiceServiceServicer_to_server(self.service_servicer, self.server) + + port = self.server.add_insecure_port(self.endpoint) + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port)) + LOGGER.info('Listening on {:s}...'.format(str(self.endpoint))) + self.server.start() + + LOGGER.debug('Service started') + + def stop(self): + LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period))) + self.server.stop(self.grace_period) + LOGGER.debug('Service stopped') diff --git a/src/compute/tests/MockServiceServiceServicerImpl.py b/src/compute/tests/MockServiceServiceServicerImpl.py new file mode 100644 index 000000000..35da85407 --- /dev/null +++ b/src/compute/tests/MockServiceServiceServicerImpl.py @@ -0,0 +1,28 @@ +import grpc, json, logging +from google.protobuf.json_format import MessageToDict +from service.proto.context_pb2 import ConnectionList, Empty, Service, ServiceId +from service.proto.service_pb2_grpc import ServiceServiceServicer + +LOGGER = logging.getLogger(__name__) + +def grpc_message_to_json_string(message): + return json.dumps(MessageToDict( + message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False), + sort_keys=True) + +class MockServiceServiceServicerImpl(ServiceServiceServicer): + def CreateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId: + LOGGER.info('[CreateService] request={:s}'.format(grpc_message_to_json_string(request))) + return request.service_id + + def UpdateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId: + LOGGER.info('[UpdateService] request={:s}'.format(grpc_message_to_json_string(request))) + return request.service_id + + def DeleteService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[DeleteService] request={:s}'.format(grpc_message_to_json_string(request))) + return Empty() + + def GetConnectionList(self, request : ServiceId, context : grpc.ServicerContext) -> ConnectionList: + LOGGER.info('[GetConnectionList] request={:s}'.format(grpc_message_to_json_string(request))) + return ConnectionList() diff --git a/src/compute/tests/mock_osm/MockOSM.py b/src/compute/tests/mock_osm/MockOSM.py new file mode 100644 index 000000000..f98cfed7a --- /dev/null +++ b/src/compute/tests/mock_osm/MockOSM.py @@ -0,0 +1,47 @@ +import logging +from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN + +LOGGER = logging.getLogger(__name__) + +WIM_USERNAME = 'admin' +WIM_PASSWORD = 'admin' +WIM_MAPPING = [] + +SERVICE_TYPE = 'ELAN' + +class MockOSM: + def __init__(self, wim_url): + wim = {'wim_url': wim_url} + wim_account = {'user': WIM_USERNAME, 'password': WIM_PASSWORD} + config = {'service_endpoint_mapping': WIM_MAPPING} + self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config) + self.service_uuid = None + + def create_connectivity_service(self): + connection_points = [] + self.wim.check_credentials() + LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points))) + result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points) + LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result))) + self.service_uuid = None + + def get_connectivity_service_status(self): + connection_points = [] + self.wim.check_credentials() + LOGGER.info('[get_connectivity_service] connection_points={:s}'.format(str(connection_points))) + result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=conn_info) + LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result))) + + def edit_connectivity_service(self): + connection_points = [] + self.wim.check_credentials() + LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points))) + result = self.wim.edit_connectivity_service(self.service_uuid, conn_info=conn_info, connection_points=connection_points) + LOGGER.info('[edit_connectivity_service] result={:s}'.format(str(result))) + + def delete_connectivity_service(self): + connection_points = [] + self.wim.check_credentials() + LOGGER.info('[delete_connectivity_service] connection_points={:s}'.format(str(connection_points))) + result = self.wim.delete_connectivity_service(self.service_uuid, conn_info=conn_info) + LOGGER.info('[delete_connectivity_service] result={:s}'.format(str(result))) diff --git a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py new file mode 100644 index 000000000..f47c56dc8 --- /dev/null +++ b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py @@ -0,0 +1,499 @@ +# -*- coding: utf-8 -*- +## +# Copyright 2018 Telefonica +# All Rights Reserved. +# +# Contributors: Oscar Gonzalez de Dios, Manuel Lopez Bravo, Guillermo Pajares Martin +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# This work has been performed in the context of the Metro-Haul project - +# funded by the European Commission under Grant number 761727 through the +# Horizon 2020 program. +## +"""The SDN/WIM connector is responsible for establishing wide area network +connectivity. + +This SDN/WIM connector implements the standard IETF RFC 8466 "A YANG Data + Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery" + +It receives the endpoints and the necessary details to request +the Layer 2 service. +""" +import requests +import uuid +import logging +#from osm_ro_plugin.sdnconn import SdnConnectorBase, SdnConnectorError +from .sdnconn import SdnConnectorBase, SdnConnectorError + +"""Check layer where we move it""" + + +class WimconnectorIETFL2VPN(SdnConnectorBase): + def __init__(self, wim, wim_account, config=None, logger=None): + """IETF L2VPN WIM connector + + Arguments: (To be completed) + wim (dict): WIM record, as stored in the database + wim_account (dict): WIM account record, as stored in the database + """ + self.logger = logging.getLogger("ro.sdn.ietfl2vpn") + super().__init__(wim, wim_account, config, logger) + self.headers = {"Content-Type": "application/json"} + self.mappings = { + m["service_endpoint_id"]: m for m in self.service_endpoint_mapping + } + self.user = wim_account.get("user") + self.passwd = wim_account.get("passwordd") + + if self.user and self.passwd is not None: + self.auth = (self.user, self.passwd) + else: + self.auth = None + + self.logger.info("IETFL2VPN Connector Initialized.") + + def check_credentials(self): + endpoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + + try: + response = requests.get(endpoint, auth=self.auth) + http_code = response.status_code + except requests.exceptions.RequestException as e: + raise SdnConnectorError(e.message, http_code=503) + + if http_code != 200: + raise SdnConnectorError("Failed while authenticating", http_code=http_code) + + self.logger.info("Credentials checked") + + def get_connectivity_service_status(self, service_uuid, conn_info=None): + """Monitor the status of the connectivity service stablished + + Arguments: + service_uuid: Connectivity service unique identifier + + Returns: + Examples:: + {'sdn_status': 'ACTIVE'} + {'sdn_status': 'INACTIVE'} + {'sdn_status': 'DOWN'} + {'sdn_status': 'ERROR'} + """ + try: + self.logger.info("Sending get connectivity service stuatus") + servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format( + self.wim["wim_url"], service_uuid + ) + response = requests.get(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.ok: + raise SdnConnectorError( + "Unable to obtain connectivity servcice status", + http_code=response.status_code, + ) + + service_status = {"sdn_status": "ACTIVE"} + + return service_status + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def search_mapp(self, connection_point): + id = connection_point["service_endpoint_id"] + if id not in self.mappings: + raise SdnConnectorError("Endpoint {} not located".format(str(id))) + else: + return self.mappings[id] + + def create_connectivity_service(self, service_type, connection_points, **kwargs): + """Stablish WAN connectivity between the endpoints + + Arguments: + service_type (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), + ``L3``. + connection_points (list): each point corresponds to + an entry point from the DC to the transport network. One + connection point serves to identify the specific access and + some other service parameters, such as encapsulation type. + Represented by a dict as follows:: + + { + "service_endpoint_id": ..., (str[uuid]) + "service_endpoint_encapsulation_type": ..., + (enum: none, dot1q, ...) + "service_endpoint_encapsulation_info": { + ... (dict) + "vlan": ..., (int, present if encapsulation is dot1q) + "vni": ... (int, present if encapsulation is vxlan), + "peers": [(ipv4_1), (ipv4_2)] + (present if encapsulation is vxlan) + } + } + + The service endpoint ID should be previously informed to the WIM + engine in the RO when the WIM port mapping is registered. + + Keyword Arguments: + bandwidth (int): value in kilobytes + latency (int): value in milliseconds + + Other QoS might be passed as keyword arguments. + + Returns: + tuple: ``(service_id, conn_info)`` containing: + - *service_uuid* (str): UUID of the established connectivity + service + - *conn_info* (dict or None): Information to be stored at the + database (or ``None``). This information will be provided to + the :meth:`~.edit_connectivity_service` and :obj:`~.delete`. + **MUST** be JSON/YAML-serializable (plain data structures). + + Raises: + SdnConnectorException: In case of error. + """ + if service_type == "ELINE": + if len(connection_points) > 2: + raise SdnConnectorError( + "Connections between more than 2 endpoints are not supported" + ) + + if len(connection_points) < 2: + raise SdnConnectorError("Connections must be of at least 2 endpoints") + + """First step, create the vpn service""" + uuid_l2vpn = str(uuid.uuid4()) + vpn_service = {} + vpn_service["vpn-id"] = uuid_l2vpn + vpn_service["vpn-scv-type"] = "vpws" + vpn_service["svc-topo"] = "any-to-any" + vpn_service["customer-name"] = "osm" + vpn_service_list = [] + vpn_service_list.append(vpn_service) + vpn_service_l = {"ietf-l2vpn-svc:vpn-service": vpn_service_list} + response_service_creation = None + conn_info = [] + self.logger.info("Sending vpn-service :{}".format(vpn_service_l)) + + try: + endpoint_service_creation = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response_service_creation = requests.post( + endpoint_service_creation, + headers=self.headers, + json=vpn_service_l, + auth=self.auth, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError( + "Request to create service Timeout", http_code=408 + ) + + if response_service_creation.status_code == 409: + raise SdnConnectorError( + "Service already exists", + http_code=response_service_creation.status_code, + ) + elif response_service_creation.status_code != requests.codes.created: + raise SdnConnectorError( + "Request to create service not accepted", + http_code=response_service_creation.status_code, + ) + + """Second step, create the connections and vpn attachments""" + for connection_point in connection_points: + connection_point_wan_info = self.search_mapp(connection_point) + site_network_access = {} + connection = {} + + if connection_point["service_endpoint_encapsulation_type"] != "none": + if ( + connection_point["service_endpoint_encapsulation_type"] + == "dot1q" + ): + """The connection is a VLAN""" + connection["encapsulation-type"] = "dot1q-vlan-tagged" + tagged = {} + tagged_interf = {} + service_endpoint_encapsulation_info = connection_point[ + "service_endpoint_encapsulation_info" + ] + + if service_endpoint_encapsulation_info["vlan"] is None: + raise SdnConnectorError("VLAN must be provided") + + tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[ + "vlan" + ] + tagged["dot1q-vlan-tagged"] = tagged_interf + connection["tagged-interface"] = tagged + else: + raise NotImplementedError("Encapsulation type not implemented") + + site_network_access["connection"] = connection + self.logger.info("Sending connection:{}".format(connection)) + vpn_attach = {} + vpn_attach["vpn-id"] = uuid_l2vpn + vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role" + site_network_access["vpn-attachment"] = vpn_attach + self.logger.info("Sending vpn-attachement :{}".format(vpn_attach)) + uuid_sna = str(uuid.uuid4()) + site_network_access["network-access-id"] = uuid_sna + site_network_access["bearer"] = connection_point_wan_info[ + "service_mapping_info" + ]["bearer"] + site_network_accesses = {} + site_network_access_list = [] + site_network_access_list.append(site_network_access) + site_network_accesses[ + "ietf-l2vpn-svc:site-network-access" + ] = site_network_access_list + conn_info_d = {} + conn_info_d["site"] = connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + conn_info_d["site-network-access-id"] = site_network_access[ + "network-access-id" + ] + conn_info_d["mapping"] = None + conn_info.append(conn_info_d) + + try: + endpoint_site_network_access_creation = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/" + "sites/site={}/site-network-accesses/".format( + self.wim["wim_url"], + connection_point_wan_info["service_mapping_info"][ + "site-id" + ], + ) + ) + response_endpoint_site_network_access_creation = requests.post( + endpoint_site_network_access_creation, + headers=self.headers, + json=site_network_accesses, + auth=self.auth, + ) + + if ( + response_endpoint_site_network_access_creation.status_code + == 409 + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Site_Network_Access with ID '{}' already exists".format( + site_network_access["network-access-id"] + ), + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code + == 400 + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Site {} does not exist".format( + connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + ), + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code + != requests.codes.created + and response_endpoint_site_network_access_creation.status_code + != requests.codes.no_content + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Request no accepted", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + except requests.exceptions.ConnectionError: + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError("Request Timeout", http_code=408) + + return uuid_l2vpn, conn_info + else: + raise NotImplementedError + + def delete_connectivity_service(self, service_uuid, conn_info=None): + """Disconnect multi-site endpoints previously connected + + This method should receive as the first argument the UUID generated by + the ``create_connectivity_service`` + """ + try: + self.logger.info("Sending delete") + servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format( + self.wim["wim_url"], service_uuid + ) + response = requests.delete(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.no_content: + raise SdnConnectorError( + "Error in the request", http_code=response.status_code + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def edit_connectivity_service( + self, service_uuid, conn_info=None, connection_points=None, **kwargs + ): + """Change an existing connectivity service, see + ``create_connectivity_service``""" + # sites = {"sites": {}} + # site_list = [] + vpn_service = {} + vpn_service["svc-topo"] = "any-to-any" + counter = 0 + + for connection_point in connection_points: + site_network_access = {} + connection_point_wan_info = self.search_mapp(connection_point) + params_site = {} + params_site["site-id"] = connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + params_site["site-vpn-flavor"] = "site-vpn-flavor-single" + device_site = {} + device_site["device-id"] = connection_point_wan_info["device-id"] + params_site["devices"] = device_site + # network_access = {} + connection = {} + + if connection_point["service_endpoint_encapsulation_type"] != "none": + if connection_point["service_endpoint_encapsulation_type"] == "dot1q": + """The connection is a VLAN""" + connection["encapsulation-type"] = "dot1q-vlan-tagged" + tagged = {} + tagged_interf = {} + service_endpoint_encapsulation_info = connection_point[ + "service_endpoint_encapsulation_info" + ] + + if service_endpoint_encapsulation_info["vlan"] is None: + raise SdnConnectorError("VLAN must be provided") + + tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[ + "vlan" + ] + tagged["dot1q-vlan-tagged"] = tagged_interf + connection["tagged-interface"] = tagged + else: + raise NotImplementedError("Encapsulation type not implemented") + + site_network_access["connection"] = connection + vpn_attach = {} + vpn_attach["vpn-id"] = service_uuid + vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role" + site_network_access["vpn-attachment"] = vpn_attach + uuid_sna = conn_info[counter]["site-network-access-id"] + site_network_access["network-access-id"] = uuid_sna + site_network_access["bearer"] = connection_point_wan_info[ + "service_mapping_info" + ]["bearer"] + site_network_accesses = {} + site_network_access_list = [] + site_network_access_list.append(site_network_access) + site_network_accesses[ + "ietf-l2vpn-svc:site-network-access" + ] = site_network_access_list + + try: + endpoint_site_network_access_edit = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/" + "sites/site={}/site-network-accesses/".format( + self.wim["wim_url"], + connection_point_wan_info["service_mapping_info"]["site-id"], + ) + ) + response_endpoint_site_network_access_creation = requests.put( + endpoint_site_network_access_edit, + headers=self.headers, + json=site_network_accesses, + auth=self.auth, + ) + + if response_endpoint_site_network_access_creation.status_code == 400: + raise SdnConnectorError( + "Service does not exist", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code != 201 + and response_endpoint_site_network_access_creation.status_code + != 204 + ): + raise SdnConnectorError( + "Request no accepted", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + counter += 1 + + return None + + def clear_all_connectivity_services(self): + """Delete all WAN Links corresponding to a WIM""" + try: + self.logger.info("Sending clear all connectivity services") + servicepoint = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response = requests.delete(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.no_content: + raise SdnConnectorError( + "Unable to clear all connectivity services", + http_code=response.status_code, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def get_all_active_connectivity_services(self): + """Provide information about all active connections provisioned by a + WIM + """ + try: + self.logger.info("Sending get all connectivity services") + servicepoint = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response = requests.get(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.ok: + raise SdnConnectorError( + "Unable to get all connectivity services", + http_code=response.status_code, + ) + + return response + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) diff --git a/src/compute/tests/mock_osm/__init__.py b/src/compute/tests/mock_osm/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/compute/tests/mock_osm/acknowledgements.txt b/src/compute/tests/mock_osm/acknowledgements.txt new file mode 100644 index 000000000..b7ce926dd --- /dev/null +++ b/src/compute/tests/mock_osm/acknowledgements.txt @@ -0,0 +1,3 @@ +MockOSM is based on source code taken from: +https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-plugin/osm_ro_plugin/sdnconn.py +https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn/wimconn_ietfl2vpn.py diff --git a/src/compute/tests/mock_osm/sdnconn.py b/src/compute/tests/mock_osm/sdnconn.py new file mode 100644 index 000000000..a1849c9ef --- /dev/null +++ b/src/compute/tests/mock_osm/sdnconn.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +## +# Copyright 2018 University of Bristol - High Performance Networks Research +# Group +# All Rights Reserved. +# +# Contributors: Anderson Bravalheri, Dimitrios Gkounis, Abubakar Siddique +# Muqaddas, Navdeep Uniyal, Reza Nejabati and Dimitra Simeonidou +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# For those usages not covered by the Apache License, Version 2.0 please +# contact with: +# +# Neither the name of the University of Bristol nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# This work has been performed in the context of DCMS UK 5G Testbeds +# & Trials Programme and in the framework of the Metro-Haul project - +# funded by the European Commission under Grant number 761727 through the +# Horizon 2020 and 5G-PPP programmes. +## +"""The SDN connector is responsible for establishing both wide area network connectivity (WIM) +and intranet SDN connectivity. + +It receives information from ports to be connected . +""" + +import logging +from http import HTTPStatus + + +class SdnConnectorError(Exception): + """Base Exception for all connector related errors + provide the parameter 'http_code' (int) with the error code: + Bad_Request = 400 + Unauthorized = 401 (e.g. credentials are not valid) + Not_Found = 404 (e.g. try to edit or delete a non existing connectivity service) + Forbidden = 403 + Method_Not_Allowed = 405 + Not_Acceptable = 406 + Request_Timeout = 408 (e.g timeout reaching server, or cannot reach the server) + Conflict = 409 + Service_Unavailable = 503 + Internal_Server_Error = 500 + """ + + def __init__(self, message, http_code=HTTPStatus.INTERNAL_SERVER_ERROR.value): + Exception.__init__(self, message) + self.http_code = http_code + + +class SdnConnectorBase(object): + """Abstract base class for all the SDN connectors + + Arguments: + wim (dict): WIM record, as stored in the database + wim_account (dict): WIM account record, as stored in the database + config + The arguments of the constructor are converted to object attributes. + An extra property, ``service_endpoint_mapping`` is created from ``config``. + """ + + def __init__(self, wim, wim_account, config=None, logger=None): + """ + :param wim: (dict). Contains among others 'wim_url' + :param wim_account: (dict). Contains among others 'uuid' (internal id), 'name', + 'sdn' (True if is intended for SDN-assist or False if intended for WIM), 'user', 'password'. + :param config: (dict or None): Particular information of plugin. These keys if present have a common meaning: + 'mapping_not_needed': (bool) False by default or if missing, indicates that mapping is not needed. + 'service_endpoint_mapping': (list) provides the internal endpoint mapping. The meaning is: + KEY meaning for WIM meaning for SDN assist + -------- -------- -------- + device_id pop_switch_dpid compute_id + device_interface_id pop_switch_port compute_pci_address + service_endpoint_id wan_service_endpoint_id SDN_service_endpoint_id + service_mapping_info wan_service_mapping_info SDN_service_mapping_info + contains extra information if needed. Text in Yaml format + switch_dpid wan_switch_dpid SDN_switch_dpid + switch_port wan_switch_port SDN_switch_port + datacenter_id vim_account vim_account + id: (internal, do not use) + wim_id: (internal, do not use) + :param logger (logging.Logger): optional logger object. If none is passed 'openmano.sdn.sdnconn' is used. + """ + self.logger = logger or logging.getLogger("ro.sdn") + self.wim = wim + self.wim_account = wim_account + self.config = config or {} + self.service_endpoint_mapping = self.config.get("service_endpoint_mapping", []) + + def check_credentials(self): + """Check if the connector itself can access the SDN/WIM with the provided url (wim.wim_url), + user (wim_account.user), and password (wim_account.password) + + Raises: + SdnConnectorError: Issues regarding authorization, access to + external URLs, etc are detected. + """ + raise NotImplementedError + + def get_connectivity_service_status(self, service_uuid, conn_info=None): + """Monitor the status of the connectivity service established + + Arguments: + service_uuid (str): UUID of the connectivity service + conn_info (dict or None): Information returned by the connector + during the service creation/edition and subsequently stored in + the database. + + Returns: + dict: JSON/YAML-serializable dict that contains a mandatory key + ``sdn_status`` associated with one of the following values:: + + {'sdn_status': 'ACTIVE'} + # The service is up and running. + + {'sdn_status': 'INACTIVE'} + # The service was created, but the connector + # cannot determine yet if connectivity exists + # (ideally, the caller needs to wait and check again). + + {'sdn_status': 'DOWN'} + # Connection was previously established, + # but an error/failure was detected. + + {'sdn_status': 'ERROR'} + # An error occurred when trying to create the service/ + # establish the connectivity. + + {'sdn_status': 'BUILD'} + # Still trying to create the service, the caller + # needs to wait and check again. + + Additionally ``error_msg``(**str**) and ``sdn_info``(**dict**) + keys can be used to provide additional status explanation or + new information available for the connectivity service. + """ + raise NotImplementedError + + def create_connectivity_service(self, service_type, connection_points, **kwargs): + """ + Establish SDN/WAN connectivity between the endpoints + :param service_type: (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), ``L3``. + :param connection_points: (list): each point corresponds to + an entry point to be connected. For WIM: from the DC to the transport network. + For SDN: Compute/PCI to the transport network. One + connection point serves to identify the specific access and + some other service parameters, such as encapsulation type. + Each item of the list is a dict with: + "service_endpoint_id": (str)(uuid) Same meaning that for 'service_endpoint_mapping' (see __init__) + In case the config attribute mapping_not_needed is True, this value is not relevant. In this case + it will contain the string "device_id:device_interface_id" + "service_endpoint_encapsulation_type": None, "dot1q", ... + "service_endpoint_encapsulation_info": (dict) with: + "vlan": ..., (int, present if encapsulation is dot1q) + "vni": ... (int, present if encapsulation is vxlan), + "peers": [(ipv4_1), (ipv4_2)] (present if encapsulation is vxlan) + "mac": ... + "device_id": ..., same meaning that for 'service_endpoint_mapping' (see __init__) + "device_interface_id": same meaning that for 'service_endpoint_mapping' (see __init__) + "switch_dpid": ..., present if mapping has been found for this device_id,device_interface_id + "swith_port": ... present if mapping has been found for this device_id,device_interface_id + "service_mapping_info": present if mapping has been found for this device_id,device_interface_id + :param kwargs: For future versions: + bandwidth (int): value in kilobytes + latency (int): value in milliseconds + Other QoS might be passed as keyword arguments. + :return: tuple: ``(service_id, conn_info)`` containing: + - *service_uuid* (str): UUID of the established connectivity service + - *conn_info* (dict or None): Information to be stored at the database (or ``None``). + This information will be provided to the :meth:`~.edit_connectivity_service` and :obj:`~.delete`. + **MUST** be JSON/YAML-serializable (plain data structures). + :raises: SdnConnectorException: In case of error. Nothing should be created in this case. + Provide the parameter http_code + """ + raise NotImplementedError + + def delete_connectivity_service(self, service_uuid, conn_info=None): + """ + Disconnect multi-site endpoints previously connected + + :param service_uuid: The one returned by create_connectivity_service + :param conn_info: The one returned by last call to 'create_connectivity_service' or 'edit_connectivity_service' + if they do not return None + :return: None + :raises: SdnConnectorException: In case of error. The parameter http_code must be filled + """ + raise NotImplementedError + + def edit_connectivity_service( + self, service_uuid, conn_info=None, connection_points=None, **kwargs + ): + """Change an existing connectivity service. + + This method's arguments and return value follow the same convention as + :meth:`~.create_connectivity_service`. + + :param service_uuid: UUID of the connectivity service. + :param conn_info: (dict or None): Information previously returned by last call to create_connectivity_service + or edit_connectivity_service + :param connection_points: (list): If provided, the old list of connection points will be replaced. + :param kwargs: Same meaning that create_connectivity_service + :return: dict or None: Information to be updated and stored at the database. + When ``None`` is returned, no information should be changed. + When an empty dict is returned, the database record will be deleted. + **MUST** be JSON/YAML-serializable (plain data structures). + Raises: + SdnConnectorException: In case of error. + """ + + def clear_all_connectivity_services(self): + """Delete all WAN Links in a WIM. + + This method is intended for debugging only, and should delete all the + connections controlled by the WIM/SDN, not only the connections that + a specific RO is aware of. + + Raises: + SdnConnectorException: In case of error. + """ + raise NotImplementedError + + def get_all_active_connectivity_services(self): + """Provide information about all active connections provisioned by a + WIM. + + Raises: + SdnConnectorException: In case of error. + """ + raise NotImplementedError diff --git a/src/compute/tests/test_unitary.py b/src/compute/tests/test_unitary.py index 689e60382..6935ac2a8 100644 --- a/src/compute/tests/test_unitary.py +++ b/src/compute/tests/test_unitary.py @@ -1,19 +1,13 @@ -import logging, os, pytest, requests, time -from google.protobuf.json_format import MessageToDict -from common.type_checkers.Assertions import validate_service_id -from compute.client.ComputeClient import ComputeClient -from compute.proto.context_pb2 import Service -from compute.service.ComputeService import ComputeService -from compute.Config import ( - GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL) +import logging, os, pytest, time +from compute.Config import RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL from compute.service.rest_server.Server import Server from compute.service.rest_server.resources.Compute import Compute -from service.service.ServiceService import ServiceService from service.Config import ( GRPC_SERVICE_PORT as SERVICE_GRPC_SERVICE_PORT, GRPC_MAX_WORKERS as SERVICE_GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD as SERVICE_GRPC_GRACE_PERIOD) +from .mock_osm.MockOSM import MockOSM +from .MockServiceService import MockServiceService -compute_grpc_port = 10000 + GRPC_SERVICE_PORT # avoid privileged ports compute_restapi_port = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports service_grpc_port = 10000 + SERVICE_GRPC_SERVICE_PORT # avoid privileged ports @@ -25,24 +19,16 @@ LOGGER.setLevel(logging.DEBUG) @pytest.fixture(scope='session') def service_service(): - _service = ServiceService( + _service = MockServiceService( port=service_grpc_port, max_workers=SERVICE_GRPC_MAX_WORKERS, grace_period=SERVICE_GRPC_GRACE_PERIOD) _service.start() yield _service _service.stop() @pytest.fixture(scope='session') -def compute_service(service_service : ServiceService): - _service = ComputeService(port=compute_grpc_port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD) - _service.start() - yield _service - _service.stop() - -@pytest.fixture(scope='session') -def compute_service_rest(): +def compute_service_rest(service_service): _rest_server = Server(port=compute_restapi_port, base_url=RESTAPI_BASE_URL) - _rest_server.add_resource( - Compute, '/restconf/config/compute', endpoint='api.compute') + _rest_server.add_resource(Compute, '/vpn-services', endpoint='l2vpn.vpn-services') _rest_server.start() time.sleep(1) # bring time for the server to start yield _rest_server @@ -50,27 +36,18 @@ def compute_service_rest(): _rest_server.join() @pytest.fixture(scope='session') -def compute_client(compute_service): - _client = ComputeClient(address='127.0.0.1', port=compute_grpc_port) - yield _client - _client.close() +def osm_wim(service_service, compute_service_rest): # pylint: disable=redefined-outer-name + wim_url = 'http://127.0.0.1:{:d}'.format(compute_restapi_port) + return MockOSM(wim_url) + +def test_compute_create_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name + osm_wim.create_connectivity_service() + +def test_compute_get_connectivity_service_status_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name + osm_wim.get_connectivity_service_status() -def test_dummy_create_connectivity_service(compute_client : ComputeClient): - # dummy test: should fail with assertion error - with pytest.raises(AssertionError): - validate_service_id(MessageToDict( - compute_client.CreateConnectivityService(Service()), - including_default_value_fields=True, preserving_proto_field_name=True, - use_integers_for_enums=False)) +def test_compute_edit_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name + osm_wim.edit_connectivity_service() -def test_dummy_create_connectivity_service_rest_api(compute_service_rest : Server): - # should work - request_url = 'http://127.0.0.1:{:s}{:s}/restconf/config/compute' - request_url = request_url.format(str(compute_restapi_port), RESTAPI_BASE_URL) - reply = requests.post(request_url, json={ - # here add context of POST request body as JSON - }) - json_reply = reply.json() - LOGGER.info('json_reply = {:s}'.format(str(json_reply))) - assert 'succeeded' in json_reply - assert json_reply['succeeded'] +def test_compute_delete_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name + osm_wim.delete_connectivity_service() -- GitLab From e6dfa488ecbe2ef952b71f2651040578111aab29 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Wed, 5 Jan 2022 21:23:24 +0100 Subject: [PATCH 002/890] First functional version of Compute component with IETF L2VPN REST-API endpoint for OSM. Common: - added chk_attribute to type_checkers module. - recovered run_tests_locally.sh Compute: - updated requirements.in - updated Config.py - updated RestServer - implemented IETF-L2VPN NBI plugin - implemented unitary tests for IETF-L2VPN NBI plugin including a Mock OSM client, and Mock Context and Service components --- run_tests_locally.sh | 72 +++---- src/common/type_checkers/Checkers.py | 7 +- src/compute/Config.py | 6 +- src/compute/requirements.in | 4 + src/compute/service/__main__.py | 11 +- .../rest_server/{Server.py => RestServer.py} | 9 +- .../{resources => nbi_plugins}/__init__.py | 0 .../nbi_plugins/ietf_l2vpn/Constants.py | 3 + .../nbi_plugins/ietf_l2vpn/L2VPN_Service.py | 69 +++++++ .../nbi_plugins/ietf_l2vpn/L2VPN_Services.py | 55 +++++ .../ietf_l2vpn/L2VPN_SiteNetworkAccesses.py | 161 +++++++++++++++ .../nbi_plugins/ietf_l2vpn/__init__.py | 22 ++ .../nbi_plugins/ietf_l2vpn/schemas/Common.py | 2 + .../ietf_l2vpn/schemas/__init__.py | 0 .../ietf_l2vpn/schemas/site_network_access.py | 66 ++++++ .../ietf_l2vpn/schemas/vpn_service.py | 32 +++ .../ietf_l2vpn/tools/Authentication.py | 11 + .../ietf_l2vpn/tools/HttpStatusCodes.py | 6 + .../nbi_plugins/ietf_l2vpn/tools/Validator.py | 21 ++ .../nbi_plugins/ietf_l2vpn/tools/__init__.py | 0 .../service/rest_server/resources/Compute.py | 52 ----- src/compute/tests/MockService.py | 41 ++++ src/compute/tests/MockServiceService.py | 45 ----- src/compute/tests/MockServicerImpl_Context.py | 188 ++++++++++++++++++ ...cerImpl.py => MockServicerImpl_Service.py} | 24 ++- src/compute/tests/Tools.py | 7 + src/compute/tests/mock_osm/MockOSM.py | 83 ++++++-- .../tests/mock_osm/WimconnectorIETFL2VPN.py | 4 +- src/compute/tests/test_unitary.py | 60 ++++-- 29 files changed, 866 insertions(+), 195 deletions(-) rename src/compute/service/rest_server/{Server.py => RestServer.py} (87%) rename src/compute/service/rest_server/{resources => nbi_plugins}/__init__.py (100%) create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py delete mode 100644 src/compute/service/rest_server/resources/Compute.py create mode 100644 src/compute/tests/MockService.py delete mode 100644 src/compute/tests/MockServiceService.py create mode 100644 src/compute/tests/MockServicerImpl_Context.py rename src/compute/tests/{MockServiceServiceServicerImpl.py => MockServicerImpl_Service.py} (59%) create mode 100644 src/compute/tests/Tools.py diff --git a/run_tests_locally.sh b/run_tests_locally.sh index 271e06851..b483de806 100755 --- a/run_tests_locally.sh +++ b/run_tests_locally.sh @@ -19,46 +19,46 @@ cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PRO #kubectl --namespace tf-dev expose deployment contextservice --port=6379 --type=NodePort --name=redis-tests #echo "Waiting 10 seconds for Redis to start..." #sleep 10 -#export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') -#export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}') +export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}') +export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}') # First destroy old coverage file rm -f $COVERAGEFILE -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# common/orm/tests/test_unitary.py \ -# common/message_broker/tests/test_unitary.py \ -# common/rpc_method_wrapper/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# centralizedattackdetector/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# context/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# device/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ -# l3_centralizedattackdetector/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ -# l3_distributedattackdetector/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ -# l3_attackmitigator/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# opticalcentralizedattackdetector/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# dbscanserving/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# opticalattackmitigator/tests/test_unitary.py -# -#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ -# service/tests/test_unitary.py +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + common/orm/tests/test_unitary.py \ + common/message_broker/tests/test_unitary.py \ + common/rpc_method_wrapper/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + centralizedattackdetector/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + context/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + device/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ + l3_centralizedattackdetector/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ + l3_distributedattackdetector/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \ + l3_attackmitigator/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + opticalcentralizedattackdetector/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + dbscanserving/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + opticalattackmitigator/tests/test_unitary.py + +coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ + service/tests/test_unitary.py coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \ compute/tests/test_unitary.py diff --git a/src/common/type_checkers/Checkers.py b/src/common/type_checkers/Checkers.py index d0eddcf21..f78395c9c 100644 --- a/src/common/type_checkers/Checkers.py +++ b/src/common/type_checkers/Checkers.py @@ -1,5 +1,5 @@ import re -from typing import Any, Container, List, Optional, Pattern, Set, Sized, Tuple, Union +from typing import Any, Container, Dict, List, Optional, Pattern, Set, Sized, Tuple, Union def chk_none(name : str, value : Any, reason=None) -> Any: if value is None: return value @@ -11,6 +11,11 @@ def chk_not_none(name : str, value : Any, reason=None) -> Any: if reason is None: reason = 'must not be None.' raise ValueError('{}({}) {}'.format(str(name), str(value), str(reason))) +def chk_attribute(name : str, container : Dict, container_name : str, **kwargs): + if name in container: return container[name] + if 'default' in kwargs: return kwargs['default'] + raise AttributeError('Missing object({:s}) in container({:s})'.format(str(name), str(container_name))) + def chk_type(name : str, value : Any, type_or_types : Union[type, Set[type]] = set()) -> Any: if isinstance(value, type_or_types): return value msg = '{}({}) is of a wrong type({}). Accepted type_or_types({}).' diff --git a/src/compute/Config.py b/src/compute/Config.py index 761ed10cb..b2d3179fa 100644 --- a/src/compute/Config.py +++ b/src/compute/Config.py @@ -1,4 +1,5 @@ import logging +from werkzeug.security import generate_password_hash # General settings LOG_LEVEL = logging.WARNING @@ -10,7 +11,10 @@ GRPC_GRACE_PERIOD = 60 # REST-API settings RESTAPI_SERVICE_PORT = 8080 -RESTAPI_BASE_URL = '/restconf/data/ietf-l2vpn-svc:l2vpn-svc' +RESTAPI_BASE_URL = '/restconf/data' +RESTAPI_USERS = { # TODO: implement a database of credentials and permissions + 'admin': generate_password_hash('admin'), +} # Prometheus settings METRICS_PORT = 9192 diff --git a/src/compute/requirements.in b/src/compute/requirements.in index 1da334a54..a8029e523 100644 --- a/src/compute/requirements.in +++ b/src/compute/requirements.in @@ -1,5 +1,9 @@ +Flask +Flask-HTTPAuth +Flask-RESTful grpcio-health-checking grpcio +jsonschema prometheus-client pytest pytest-benchmark diff --git a/src/compute/service/__main__.py b/src/compute/service/__main__.py index f45af374c..eacc1f6c4 100644 --- a/src/compute/service/__main__.py +++ b/src/compute/service/__main__.py @@ -4,9 +4,9 @@ from common.Settings import get_setting from compute.Config import ( GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL, METRICS_PORT) -from compute.service.ComputeService import ComputeService -from compute.service.rest_server.Server import Server -from compute.service.rest_server.resources.Compute import Compute +from .ComputeService import ComputeService +from .rest_server.RestServer import RestServer +from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn terminate = threading.Event() LOGGER = None @@ -41,9 +41,8 @@ def main(): grpc_service = ComputeService(port=grpc_service_port, max_workers=max_workers, grace_period=grace_period) grpc_service.start() - rest_server = Server(port=restapi_service_port, base_url=restapi_base_url) - rest_server.add_resource( - Compute, '/restconf/config/compute', endpoint='api.compute') + rest_server = RestServer(port=restapi_service_port, base_url=restapi_base_url) + register_ietf_l2vpn(rest_server) rest_server.start() # Wait for Ctrl+C or termination signal diff --git a/src/compute/service/rest_server/Server.py b/src/compute/service/rest_server/RestServer.py similarity index 87% rename from src/compute/service/rest_server/Server.py rename to src/compute/service/rest_server/RestServer.py index 03212d4aa..8ed8dbbbf 100644 --- a/src/compute/service/rest_server/Server.py +++ b/src/compute/service/rest_server/RestServer.py @@ -1,10 +1,9 @@ import logging, threading, time from flask import Flask, request -from flask_restful import Api +from flask_restful import Api, Resource from werkzeug.serving import make_server from compute.Config import RESTAPI_BASE_URL, RESTAPI_SERVICE_PORT - logging.getLogger('werkzeug').setLevel(logging.WARNING) BIND_ADDRESS = '0.0.0.0' @@ -15,17 +14,19 @@ def log_request(response): LOGGER.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status) return response -class Server(threading.Thread): +class RestServer(threading.Thread): def __init__(self, host=BIND_ADDRESS, port=RESTAPI_SERVICE_PORT, base_url=RESTAPI_BASE_URL): threading.Thread.__init__(self, daemon=True) self.host = host self.port = port self.base_url = base_url + self.srv = None + self.ctx = None self.app = Flask(__name__) self.app.after_request(log_request) self.api = Api(self.app, prefix=self.base_url) - def add_resource(self, resource, *urls, **kwargs): + def add_resource(self, resource : Resource, *urls, **kwargs): self.api.add_resource(resource, *urls, **kwargs) def run(self): diff --git a/src/compute/service/rest_server/resources/__init__.py b/src/compute/service/rest_server/nbi_plugins/__init__.py similarity index 100% rename from src/compute/service/rest_server/resources/__init__.py rename to src/compute/service/rest_server/nbi_plugins/__init__.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py new file mode 100644 index 000000000..87c32c444 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py @@ -0,0 +1,3 @@ +DEFAULT_MTU = 1512 +DEFAULT_ADDRESS_FAMILIES = ['IPV4'] +DEFAULT_SUB_INTERFACE_INDEX = 0 diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py new file mode 100644 index 000000000..752a027ad --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py @@ -0,0 +1,69 @@ +import logging +from typing import Dict, List +from flask import request +from flask.json import jsonify +from flask_restful import Resource +from werkzeug.exceptions import UnsupportedMediaType +from common.Constants import DEFAULT_CONTEXT_UUID +from common.Settings import get_setting +from context.client.ContextClient import ContextClient +from context.proto.context_pb2 import ServiceId +from service.client.ServiceClient import ServiceClient +from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum +from .tools.Authentication import HTTP_AUTH +from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR + +LOGGER = logging.getLogger(__name__) + +class L2VPN_Service(Resource): + def __init__(self) -> None: + super().__init__() + self.context_client = ContextClient( + get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC')) + self.service_client = ServiceClient( + get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC')) + + @HTTP_AUTH.login_required + def get(self, vpn_id : str): + LOGGER.debug('VPN_Id: {:s}'.format(str(vpn_id))) + LOGGER.debug('Request: {:s}'.format(str(request))) + + # pylint: disable=no-member + service_id_request = ServiceId() + service_id_request.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID + service_id_request.service_uuid.uuid = vpn_id + + try: + service_reply = self.context_client.GetService(service_id_request) + if service_reply.service_id != service_id_request: # pylint: disable=no-member + raise Exception('Service retrieval failed. Wrong Service Id was returned') + + service_ready_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE + service_status = service_reply.service_status.service_status + response = jsonify({}) + response.status_code = HTTP_OK if service_status == service_ready_status else HTTP_GATEWAYTIMEOUT + except Exception as e: # pylint: disable=broad-except + LOGGER.exception('Something went wrong Retrieving Service {:s}'.format(str(request))) + response = jsonify({'error': str(e)}) + response.status_code = HTTP_SERVERERROR + return response + + @HTTP_AUTH.login_required + def delete(self, vpn_id : str): + LOGGER.debug('VPN_Id: {:s}'.format(str(vpn_id))) + LOGGER.debug('Request: {:s}'.format(str(request))) + + # pylint: disable=no-member + service_id_request = ServiceId() + service_id_request.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID + service_id_request.service_uuid.uuid = vpn_id + + try: + self.service_client.DeleteService(service_id_request) + response = jsonify({}) + response.status_code = HTTP_NOCONTENT + except Exception as e: # pylint: disable=broad-except + LOGGER.exception('Something went wrong Deleting Service {:s}'.format(str(request))) + response = jsonify({'error': str(e)}) + response.status_code = HTTP_SERVERERROR + return response diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py new file mode 100644 index 000000000..2ed0293f0 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py @@ -0,0 +1,55 @@ +import logging +from typing import Dict, List +from flask import request +from flask.json import jsonify +from flask_restful import Resource +from werkzeug.exceptions import UnsupportedMediaType +from common.Constants import DEFAULT_CONTEXT_UUID +from common.Settings import get_setting +from service.client.ServiceClient import ServiceClient +from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum +from .schemas.vpn_service import SCHEMA_VPN_SERVICE +from .tools.Authentication import HTTP_AUTH +from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR +from .tools.Validator import validate_message + +LOGGER = logging.getLogger(__name__) + +class L2VPN_Services(Resource): + def __init__(self) -> None: + super().__init__() + self.service_client = ServiceClient( + get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC')) + + @HTTP_AUTH.login_required + def get(self): + return {} + + @HTTP_AUTH.login_required + def post(self): + if not request.is_json: raise UnsupportedMediaType('JSON payload is required') + request_data : Dict = request.json + LOGGER.debug('Request: {:s}'.format(str(request_data))) + validate_message(SCHEMA_VPN_SERVICE, request_data) + + vpn_services : List[Dict] = request_data['ietf-l2vpn-svc:vpn-service'] + for vpn_service in vpn_services: + # pylint: disable=no-member + service_request = Service() + service_request.service_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID + service_request.service_id.service_uuid.uuid = vpn_service['vpn-id'] + service_request.service_type = ServiceTypeEnum.SERVICETYPE_L3NM + service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED + + try: + service_reply = self.service_client.CreateService(service_request) + if service_reply != service_request.service_id: # pylint: disable=no-member + raise Exception('Service creation failed. Wrong Service Id was returned') + + response = jsonify({}) + response.status_code = HTTP_CREATED + except Exception as e: # pylint: disable=broad-except + LOGGER.exception('Something went wrong Creating Service {:s}'.format(str(request))) + response = jsonify({'error': str(e)}) + response.status_code = HTTP_SERVERERROR + return response diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py new file mode 100644 index 000000000..639e8c63f --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py @@ -0,0 +1,161 @@ +import json, logging +from typing import Dict +from flask import request +from flask.json import jsonify +from flask.wrappers import Response +from flask_restful import Resource +from werkzeug.exceptions import UnsupportedMediaType +from common.Constants import DEFAULT_CONTEXT_UUID +from common.Settings import get_setting +from context.client.ContextClient import ContextClient +from context.proto.context_pb2 import Service, ServiceId, ServiceStatusEnum +from service.client.ServiceClient import ServiceClient +from .schemas.site_network_access import SCHEMA_SITE_NETWORK_ACCESS +from .tools.Authentication import HTTP_AUTH +from .tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR +from .tools.Validator import validate_message +from .Constants import DEFAULT_ADDRESS_FAMILIES, DEFAULT_MTU, DEFAULT_SUB_INTERFACE_INDEX + +LOGGER = logging.getLogger(__name__) + +def process_site_network_access(context_client : ContextClient, site_network_access : Dict) -> Service: + vpn_id = site_network_access['vpn-attachment']['vpn-id'] + cvlan_id = site_network_access['connection']['tagged-interface']['dot1q-vlan-tagged']['cvlan-id'] + bearer_reference = site_network_access['bearer']['bearer-reference'] + + # Assume bearer_reference = '::' + # Assume route_distinguisher = 0: + device_uuid,endpoint_uuid,router_id = bearer_reference.split(':') + route_distinguisher = '0:{:d}'.format(cvlan_id) + + # pylint: disable=no-member + service_id = ServiceId() + service_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID + service_id.service_uuid.uuid = vpn_id + + service_readonly = context_client.GetService(service_id) + service = Service() + service.CopyFrom(service_readonly) + + for endpoint_id in service.service_endpoint_ids: # pylint: disable=no-member + if endpoint_id.device_id.device_uuid.uuid != device_uuid: continue + if endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue + break # found, do nothing + else: + # not found, add it + endpoint_id = service.service_endpoint_ids.add() # pylint: disable=no-member + endpoint_id.device_id.device_uuid.uuid = device_uuid + endpoint_id.endpoint_uuid.uuid = endpoint_uuid + + for config_rule in service.service_config.config_rules: # pylint: disable=no-member + if config_rule.resource_key != 'settings': continue + json_settings = json.loads(config_rule.resource_value) + + if 'route_distinguisher' not in json_settings: # missing, add it + json_settings['route_distinguisher'] = route_distinguisher + elif json_settings['route_distinguisher'] != route_distinguisher: # differs, raise exception + msg = 'Specified RouteDistinguisher({:s}) differs from Service RouteDistinguisher({:s})' + raise Exception(msg.format(str(json_settings['route_distinguisher']), str(route_distinguisher))) + + if 'mtu' not in json_settings: # missing, add it + json_settings['mtu'] = DEFAULT_MTU + elif json_settings['mtu'] != DEFAULT_MTU: # differs, raise exception + msg = 'Specified MTU({:s}) differs from Service MTU({:s})' + raise Exception(msg.format(str(json_settings['mtu']), str(DEFAULT_MTU))) + + if 'address_families' not in json_settings: # missing, add it + json_settings['address_families'] = DEFAULT_ADDRESS_FAMILIES + elif json_settings['address_families'] != DEFAULT_ADDRESS_FAMILIES: # differs, raise exception + msg = 'Specified AddressFamilies({:s}) differs from Service AddressFamilies({:s})' + raise Exception(msg.format(str(json_settings['address_families']), str(DEFAULT_ADDRESS_FAMILIES))) + + config_rule.resource_value = json.dumps(json_settings, sort_keys=True) + break + else: + # not found, add it + config_rule = service.service_config.config_rules.add() # pylint: disable=no-member + config_rule.resource_key = 'settings' + config_rule.resource_value = json.dumps({ + 'route_distinguisher': route_distinguisher, + 'mtu': DEFAULT_MTU, + 'address_families': DEFAULT_ADDRESS_FAMILIES, + }, sort_keys=True) + + endpoint_settings_key = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid) + for config_rule in service.service_config.config_rules: # pylint: disable=no-member + if config_rule.resource_key != endpoint_settings_key: continue + json_settings = json.loads(config_rule.resource_value) + + if 'router_id' not in json_settings: # missing, add it + json_settings['router_id'] = router_id + elif json_settings['router_id'] != router_id: # differs, raise exception + msg = 'Specified RouterId({:s}) differs from Service RouterId({:s})' + raise Exception(msg.format(str(json_settings['router_id']), str(router_id))) + + if 'sub_interface_index' not in json_settings: # missing, add it + json_settings['sub_interface_index'] = DEFAULT_SUB_INTERFACE_INDEX + elif json_settings['sub_interface_index'] != DEFAULT_SUB_INTERFACE_INDEX: # differs, raise exception + msg = 'Specified SubInterfaceIndex({:s}) differs from Service SubInterfaceIndex({:s})' + raise Exception(msg.format( + str(json_settings['sub_interface_index']), str(DEFAULT_SUB_INTERFACE_INDEX))) + + config_rule.resource_value = json.dumps(json_settings, sort_keys=True) + break + else: + # not found, add it + config_rule = service.service_config.config_rules.add() # pylint: disable=no-member + config_rule.resource_key = endpoint_settings_key + config_rule.resource_value = json.dumps({ + 'router_id': router_id, + 'sub_interface_index': DEFAULT_SUB_INTERFACE_INDEX, + }, sort_keys=True) + + if len(service.service_endpoint_ids) >= 2: + service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE + + return service + +def process_list_site_network_access( + context_client : ContextClient, service_client : ServiceClient, request_data : Dict) -> Response: + + LOGGER.debug('Request: {:s}'.format(str(request_data))) + validate_message(SCHEMA_SITE_NETWORK_ACCESS, request_data) + + errors = [] + for site_network_access in request_data['ietf-l2vpn-svc:site-network-access']: + try: + service_request = process_site_network_access(context_client, site_network_access) + service_reply = service_client.CreateService(service_request) + if service_reply != service_request.service_id: # pylint: disable=no-member + raise Exception('Service update failed. Wrong Service Id was returned') + except Exception as e: # pylint: disable=broad-except + LOGGER.exception('Something went wrong Updating Service {:s}'.format(str(request))) + errors.append({'error': str(e)}) + + response = jsonify(errors) + response.status_code = HTTP_NOCONTENT if len(errors) == 0 else HTTP_SERVERERROR + return response + +class L2VPN_SiteNetworkAccesses(Resource): + def __init__(self) -> None: + super().__init__() + self.context_client = ContextClient( + get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC')) + self.service_client = ServiceClient( + get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC')) + + #@HTTP_AUTH.login_required + #def get(self): + # return {} + + @HTTP_AUTH.login_required + def post(self, site_id : str): + if not request.is_json: raise UnsupportedMediaType('JSON payload is required') + LOGGER.debug('Site_Id: {:s}'.format(str(site_id))) + return process_list_site_network_access(self.context_client, self.service_client, request.json) + + @HTTP_AUTH.login_required + def put(self, site_id : str): + if not request.is_json: raise UnsupportedMediaType('JSON payload is required') + LOGGER.debug('Site_Id: {:s}'.format(str(site_id))) + return process_list_site_network_access(self.context_client, self.service_client, request.json) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py new file mode 100644 index 000000000..979c8a3bc --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py @@ -0,0 +1,22 @@ +# RFC 8466 - L2VPN Service Model (L2SM) +# Ref: https://datatracker.ietf.org/doc/html/rfc8466 + +from flask_restful import Resource +from compute.service.rest_server.RestServer import RestServer +from .L2VPN_Services import L2VPN_Services +from .L2VPN_Service import L2VPN_Service +from .L2VPN_SiteNetworkAccesses import L2VPN_SiteNetworkAccesses + +URL_PREFIX = '/ietf-l2vpn-svc:l2vpn-svc' + +def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs): + urls = [(URL_PREFIX + url) for url in urls] + rest_server.add_resource(resource, *urls, **kwargs) + +def register_ietf_l2vpn(rest_server : RestServer): + _add_resource(rest_server, L2VPN_Services, + '/vpn-services') + _add_resource(rest_server, L2VPN_Service, + '/vpn-services/vpn-service=', '/vpn-services/vpn-service=/') + _add_resource(rest_server, L2VPN_SiteNetworkAccesses, + '/sites/site=/site-network-accesses', '/sites/site=/site-network-accesses/') diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py new file mode 100644 index 000000000..f54da792b --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py @@ -0,0 +1,2 @@ +# String pattern for UUIDs such as '3fd942ee-2dc3-41d1-aeec-65aa85d117b2' +REGEX_UUID = r'[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}' diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py new file mode 100644 index 000000000..33ba8cc7f --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py @@ -0,0 +1,66 @@ +# Example request: +# request = {'ietf-l2vpn-svc:site-network-access': [{ +# 'network-access-id': '3fd942ee-2dc3-41d1-aeec-65aa85d117b2', +# 'vpn-attachment': {'vpn-id': '954b1b53-4a8c-406d-9eff-750ec2c9a258', +# 'site-role': 'any-to-any-role'}, +# 'connection': {'encapsulation-type': 'dot1q-vlan-tagged', 'tagged-interface': { +# 'dot1q-vlan-tagged': {'cvlan-id': 1234}}}, +# 'bearer': {'bearer-reference': '1a'} +# }]} + +from .Common import REGEX_UUID + +SCHEMA_SITE_NETWORK_ACCESS = { + '$schema': 'https://json-schema.org/draft/2020-12/schema', + 'type': 'object', + 'required': ['ietf-l2vpn-svc:site-network-access'], + 'properties': { + 'ietf-l2vpn-svc:site-network-access': { + 'type': 'array', + 'minItems': 1, + 'maxItems': 1, # by now we do not support multiple site-network-access in the same message + 'items': { + 'type': 'object', + 'required': ['network-access-id', 'vpn-attachment', 'connection', 'bearer'], + 'properties': { + 'network-access-id': {'type': 'string', 'pattern': REGEX_UUID}, + 'vpn-attachment': { + 'type': 'object', + 'required': ['vpn-id', 'site-role'], + 'properties': { + 'vpn-id': {'type': 'string', 'pattern': REGEX_UUID}, + 'site-role': {'type': 'string', 'minLength': 1}, + }, + }, + 'connection': { + 'type': 'object', + 'required': ['encapsulation-type', 'tagged-interface'], + 'properties': { + 'encapsulation-type': {'enum': ['dot1q-vlan-tagged']}, + 'tagged-interface': { + 'type': 'object', + 'required': ['dot1q-vlan-tagged'], + 'properties': { + 'dot1q-vlan-tagged': { + 'type': 'object', + 'required': ['cvlan-id'], + 'properties': { + 'cvlan-id': {'type': 'integer', 'minimum': 1, 'maximum': 4094}, + }, + }, + }, + }, + }, + }, + 'bearer': { + 'type': 'object', + 'required': ['bearer-reference'], + 'properties': { + 'bearer-reference': {'type': 'string', 'minLength': 1}, + }, + }, + }, + }, + }, + }, +} diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py new file mode 100644 index 000000000..54e9c5316 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py @@ -0,0 +1,32 @@ +# Example request: +# request = {'ietf-l2vpn-svc:vpn-service': [{ +# 'vpn-id': 'c6270231-f1de-4687-b2ed-7b58f9105775', +# 'vpn-svc-type': 'vpws', +# 'svc-topo': 'any-to-any', +# 'customer-name': 'osm' +# }]} + +from .Common import REGEX_UUID + +SCHEMA_VPN_SERVICE = { + '$schema': 'https://json-schema.org/draft/2020-12/schema', + 'type': 'object', + 'required': ['ietf-l2vpn-svc:vpn-service'], + 'properties': { + 'ietf-l2vpn-svc:vpn-service': { + 'type': 'array', + 'minItems': 1, + 'maxItems': 1, # by now we do not support multiple vpn-service in the same message + 'items': { + 'type': 'object', + 'required': ['vpn-id', 'vpn-svc-type', 'svc-topo', 'customer-name'], + 'properties': { + 'vpn-id': {'type': 'string', 'pattern': REGEX_UUID}, + 'vpn-svc-type': {'enum': ['vpws']}, + 'svc-topo': {'enum': ['any-to-any']}, + 'customer-name': {'const': 'osm'}, + }, + } + } + }, +} diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py new file mode 100644 index 000000000..de7c9eafd --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py @@ -0,0 +1,11 @@ +from flask_httpauth import HTTPBasicAuth +from werkzeug.security import check_password_hash +from compute.Config import RESTAPI_USERS + +HTTP_AUTH = HTTPBasicAuth() + +@HTTP_AUTH.verify_password +def verify_password(username, password): + if username not in RESTAPI_USERS: return None + if not check_password_hash(RESTAPI_USERS[username], password): return None + return username diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py new file mode 100644 index 000000000..587967010 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py @@ -0,0 +1,6 @@ +HTTP_OK = 200 +HTTP_CREATED = 201 +HTTP_NOCONTENT = 204 +HTTP_BADREQUEST = 400 +HTTP_SERVERERROR = 500 +HTTP_GATEWAYTIMEOUT = 504 \ No newline at end of file diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py new file mode 100644 index 000000000..9c126d71b --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py @@ -0,0 +1,21 @@ +from typing import List +from flask.json import jsonify +from jsonschema import _utils +from jsonschema.validators import validator_for +from jsonschema.protocols import Validator +from jsonschema.exceptions import ValidationError +from werkzeug.exceptions import BadRequest +from .HttpStatusCodes import HTTP_BADREQUEST + +def validate_message(schema, message): + validator_class = validator_for(schema) + validator : Validator = validator_class(schema) + errors : List[ValidationError] = sorted(validator.iter_errors(message), key=str) + if len(errors) == 0: return + response = jsonify([ + {'message': str(error.message), 'schema': str(error.schema), 'validator': str(error.validator), + 'where': str(_utils.format_as_index(container='message', indices=error.relative_path))} + for error in errors + ]) + response.status_code = HTTP_BADREQUEST + raise BadRequest(response=response) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/compute/service/rest_server/resources/Compute.py b/src/compute/service/rest_server/resources/Compute.py deleted file mode 100644 index 4b845be2e..000000000 --- a/src/compute/service/rest_server/resources/Compute.py +++ /dev/null @@ -1,52 +0,0 @@ -import logging -from flask.json import jsonify -from flask_restful import Resource -from common.Settings import get_setting -from common.Constants import DEFAULT_CONTEXT_UUID -from service.client.ServiceClient import ServiceClient -from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum - -LOGGER = logging.getLogger(__name__) - -class Compute(Resource): - def __init__(self) -> None: - super().__init__() - - def get(self): - # Here implement HTTP GET method - raise NotImplementedError() - - def post(self): - # Here implement HTTP POST method - - # Retrieve required data from request - new_service_context_id = DEFAULT_CONTEXT_UUID - new_service_id = 'my-service-id' - - # Find Service address/port from environment and instantiate client - service_host = get_setting('SERVICESERVICE_SERVICE_HOST') - service_port = get_setting('SERVICESERVICE_SERVICE_PORT_GRPC') - service_client = ServiceClient(service_host, service_port) - - # Compose a dummy CreateService request - request = Service() - request.service_id.context_id.context_uuid.uuid = new_service_context_id - request.service_id.service_uuid.uuid = new_service_id - request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM - request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED - - try: - # Issue gRPC request to Service component - reply = service_client.CreateService(request) - - # Parse CreateService reply, here we check that obtained service Id and context are the expected ones. - reply_context_uuid = reply.context_id.context_uuid.uuid - reply_service_uuid = reply.service_uuid.uuid - #succeeded = (reply_context_uuid == new_service_context_id) and (reply_service_uuid == new_service_id) - succeeded = True - reply = {'succeeded': succeeded} - except Exception as e: - LOGGER.exception('Something went wrong Creating Service {:s}'.format(str(request))) - reply = {'succeeded': False, 'error': str(e)} - - return jsonify(reply) diff --git a/src/compute/tests/MockService.py b/src/compute/tests/MockService.py new file mode 100644 index 000000000..54b420f5a --- /dev/null +++ b/src/compute/tests/MockService.py @@ -0,0 +1,41 @@ +import grpc, logging +from concurrent import futures + +GRPC_MAX_WORKERS = 10 +GRPC_GRACE_PERIOD = 60 + +class MockService: + def __init__(self, address, port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD, cls_name=__name__): + self.logger = logging.getLogger(cls_name) + self.address = address + self.port = port + self.endpoint = None + self.max_workers = max_workers + self.grace_period = grace_period + self.pool = None + self.server = None + + def install_servicers(self): + pass + + def start(self): + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port)) + self.logger.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format( + str(self.endpoint), str(self.max_workers))) + + self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers) + self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,)) + + self.install_servicers() + + port = self.server.add_insecure_port(self.endpoint) + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port)) + self.logger.info('Listening on {:s}...'.format(str(self.endpoint))) + self.server.start() + + self.logger.debug('Service started') + + def stop(self): + self.logger.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period))) + self.server.stop(self.grace_period) + self.logger.debug('Service stopped') diff --git a/src/compute/tests/MockServiceService.py b/src/compute/tests/MockServiceService.py deleted file mode 100644 index fe90aa4d8..000000000 --- a/src/compute/tests/MockServiceService.py +++ /dev/null @@ -1,45 +0,0 @@ -import grpc, logging -from concurrent import futures -from service.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD -from service.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server -from .MockServiceServiceServicerImpl import MockServiceServiceServicerImpl - -BIND_ADDRESS = '0.0.0.0' -LOGGER = logging.getLogger(__name__) - -class MockServiceService: - def __init__( - self, address=BIND_ADDRESS, port=GRPC_SERVICE_PORT, max_workers=GRPC_MAX_WORKERS, - grace_period=GRPC_GRACE_PERIOD): - - self.address = address - self.port = port - self.endpoint = None - self.max_workers = max_workers - self.grace_period = grace_period - self.service_servicer = None - self.pool = None - self.server = None - - def start(self): - self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port)) - LOGGER.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format( - str(self.endpoint), str(self.max_workers))) - - self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers) - self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,)) - - self.service_servicer = MockServiceServiceServicerImpl() - add_ServiceServiceServicer_to_server(self.service_servicer, self.server) - - port = self.server.add_insecure_port(self.endpoint) - self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port)) - LOGGER.info('Listening on {:s}...'.format(str(self.endpoint))) - self.server.start() - - LOGGER.debug('Service started') - - def stop(self): - LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period))) - self.server.stop(self.grace_period) - LOGGER.debug('Service stopped') diff --git a/src/compute/tests/MockServicerImpl_Context.py b/src/compute/tests/MockServicerImpl_Context.py new file mode 100644 index 000000000..d79a755d4 --- /dev/null +++ b/src/compute/tests/MockServicerImpl_Context.py @@ -0,0 +1,188 @@ +import grpc, logging +from typing import Any, Dict, Iterator, List +from context.proto.context_pb2 import ( + Context, ContextEvent, ContextId, ContextIdList, ContextList, Device, DeviceEvent, DeviceId, DeviceIdList, + DeviceList, Empty, Link, LinkEvent, LinkId, LinkIdList, LinkList, Service, ServiceEvent, ServiceId, ServiceIdList, + ServiceList, Topology, TopologyEvent, TopologyId, TopologyIdList, TopologyList) +from context.proto.context_pb2_grpc import ContextServiceServicer +from .Tools import grpc_message_to_json_string + +LOGGER = logging.getLogger(__name__) + +def get_container(database : Dict[str, Dict[str, Any]], container_name : str) -> Dict[str, Any]: + return database.setdefault(container_name, {}) + +def get_entries(database : Dict[str, Dict[str, Any]], container_name : str) -> List[Any]: + container = get_container(database, container_name) + return [container[entry_uuid] for entry_uuid in sorted(container.keys())] + +def get_entry( + context : grpc.ServicerContext, database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str +) -> Any: + LOGGER.debug('[get_entry] AFTER database={:s}'.format(str(database))) + container = get_container(database, container_name) + if entry_uuid not in container: + context.abort(grpc.StatusCode.INTERNAL, str('{:s}({:s}) not found'.format(container_name, entry_uuid))) + return container[entry_uuid] + +def set_entry(database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str, entry : Any) -> Any: + container = get_container(database, container_name) + LOGGER.debug('[set_entry] BEFORE database={:s}'.format(str(database))) + container[entry_uuid] = entry + LOGGER.debug('[set_entry] AFTER database={:s}'.format(str(database))) + return entry + +def del_entry( + context : grpc.ServicerContext, database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str +) -> Any: + container = get_container(database, container_name) + if entry_uuid not in container: + context.abort(grpc.StatusCode.INTERNAL, str('{:s}({:s}) not found'.format(container_name, entry_uuid))) + del container[entry_uuid] + return Empty() + +class MockServicerImpl_Context(ContextServiceServicer): + def __init__(self): + LOGGER.info('[__init__] Creating Servicer...') + self.database : Dict[str, Any] = {} + LOGGER.info('[__init__] Servicer Created') + + # ----- Context ---------------------------------------------------------------------------------------------------- + + def ListContextIds(self, request: Empty, context : grpc.ServicerContext) -> ContextIdList: + LOGGER.info('[ListContextIds] request={:s}'.format(grpc_message_to_json_string(request))) + return ContextIdList(context_ids=[context.context_id for context in get_entries(self.database, 'context')]) + + def ListContexts(self, request: Empty, context : grpc.ServicerContext) -> ContextList: + LOGGER.info('[ListContexts] request={:s}'.format(grpc_message_to_json_string(request))) + return ContextList(contexts=get_entries(self.database, 'context')) + + def GetContext(self, request: ContextId, context : grpc.ServicerContext) -> Context: + LOGGER.info('[GetContext] request={:s}'.format(grpc_message_to_json_string(request))) + return get_entry(context, self.database, 'context', request.context_uuid.uuid) + + def SetContext(self, request: Context, context : grpc.ServicerContext) -> ContextId: + LOGGER.info('[SetContext] request={:s}'.format(grpc_message_to_json_string(request))) + return set_entry(self.database, 'context', request.context_uuid.uuid, request).context_id + + def RemoveContext(self, request: ContextId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[RemoveContext] request={:s}'.format(grpc_message_to_json_string(request))) + return del_entry(context, self.database, 'context', request.context_uuid.uuid) + + def GetContextEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[ContextEvent]: + LOGGER.info('[GetContextEvents] request={:s}'.format(grpc_message_to_json_string(request))) + + + # ----- Topology --------------------------------------------------------------------------------------------------- + + def ListTopologyIds(self, request: ContextId, context : grpc.ServicerContext) -> TopologyIdList: + LOGGER.info('[ListTopologyIds] request={:s}'.format(grpc_message_to_json_string(request))) + topologies = get_entries(self.database, 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid))) + return TopologyIdList(topology_ids=[topology.topology_id for topology in topologies]) + + def ListTopologies(self, request: ContextId, context : grpc.ServicerContext) -> TopologyList: + LOGGER.info('[ListTopologies] request={:s}'.format(grpc_message_to_json_string(request))) + topologies = get_entries(self.database, 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid))) + return TopologyList(topologies=[topology for topology in topologies]) + + def GetTopology(self, request: TopologyId, context : grpc.ServicerContext) -> Topology: + LOGGER.info('[GetTopology] request={:s}'.format(grpc_message_to_json_string(request))) + container_name = 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid)) + return get_entry(context, self.database, container_name, request.topology_uuid.uuid) + + def SetTopology(self, request: Topology, context : grpc.ServicerContext) -> TopologyId: + LOGGER.info('[SetTopology] request={:s}'.format(grpc_message_to_json_string(request))) + container_name = 'topology[{:s}]'.format(str(request.topology_id.context_id.context_uuid.uuid)) + return set_entry(self.database, container_name, request.topology_id.topology_uuid.uuid, request).topology_id + + def RemoveTopology(self, request: TopologyId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[RemoveTopology] request={:s}'.format(grpc_message_to_json_string(request))) + container_name = 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid)) + return del_entry(context, self.database, container_name, request.topology_uuid.uuid) + + def GetTopologyEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[TopologyEvent]: + LOGGER.info('[GetTopologyEvents] request={:s}'.format(grpc_message_to_json_string(request))) + + + # ----- Device ----------------------------------------------------------------------------------------------------- + + def ListDeviceIds(self, request: Empty, context : grpc.ServicerContext) -> DeviceIdList: + LOGGER.info('[ListDeviceIds] request={:s}'.format(grpc_message_to_json_string(request))) + return DeviceIdList(device_ids=[device.device_id for device in get_entries(self.database, 'device')]) + + def ListDevices(self, request: Empty, context : grpc.ServicerContext) -> DeviceList: + LOGGER.info('[ListDevices] request={:s}'.format(grpc_message_to_json_string(request))) + return DeviceList(devices=get_entries(self.database, 'device')) + + def GetDevice(self, request: DeviceId, context : grpc.ServicerContext) -> Device: + LOGGER.info('[GetDevice] request={:s}'.format(grpc_message_to_json_string(request))) + return get_entry(context, self.database, 'device', request.device_uuid.uuid) + + def SetDevice(self, request: Context, context : grpc.ServicerContext) -> DeviceId: + LOGGER.info('[SetDevice] request={:s}'.format(grpc_message_to_json_string(request))) + return set_entry(self.database, 'device', request.device_uuid.uuid, request).device_id + + def RemoveDevice(self, request: DeviceId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[RemoveDevice] request={:s}'.format(grpc_message_to_json_string(request))) + return del_entry(context, self.database, 'device', request.device_uuid.uuid) + + def GetDeviceEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[DeviceEvent]: + LOGGER.info('[GetDeviceEvents] request={:s}'.format(grpc_message_to_json_string(request))) + + + # ----- Link ------------------------------------------------------------------------------------------------------- + + def ListLinkIds(self, request: Empty, context : grpc.ServicerContext) -> LinkIdList: + LOGGER.info('[ListLinkIds] request={:s}'.format(grpc_message_to_json_string(request))) + return LinkIdList(link_ids=[link.link_id for link in get_entries(self.database, 'link')]) + + def ListLinks(self, request: Empty, context : grpc.ServicerContext) -> LinkList: + LOGGER.info('[ListLinks] request={:s}'.format(grpc_message_to_json_string(request))) + return LinkList(links=get_entries(self.database, 'link')) + + def GetLink(self, request: LinkId, context : grpc.ServicerContext) -> Link: + LOGGER.info('[GetLink] request={:s}'.format(grpc_message_to_json_string(request))) + return get_entry(context, self.database, 'link', request.link_uuid.uuid) + + def SetLink(self, request: Context, context : grpc.ServicerContext) -> LinkId: + LOGGER.info('[SetLink] request={:s}'.format(grpc_message_to_json_string(request))) + return set_entry(self.database, 'link', request.link_uuid.uuid, request).link_id + + def RemoveLink(self, request: LinkId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[RemoveLink] request={:s}'.format(grpc_message_to_json_string(request))) + return del_entry(context, self.database, 'link', request.link_uuid.uuid) + + def GetLinkEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[LinkEvent]: + LOGGER.info('[GetLinkEvents] request={:s}'.format(grpc_message_to_json_string(request))) + + + # ----- Service ---------------------------------------------------------------------------------------------------- + + def ListServiceIds(self, request: ContextId, context : grpc.ServicerContext) -> ServiceIdList: + LOGGER.info('[ListServiceIds] request={:s}'.format(grpc_message_to_json_string(request))) + services = get_entries(self.database, 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid))) + return ServiceIdList(service_ids=[service.service_id for service in services]) + + def ListServices(self, request: ContextId, context : grpc.ServicerContext) -> ServiceList: + LOGGER.info('[ListServices] request={:s}'.format(grpc_message_to_json_string(request))) + services = get_entries(self.database, 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid))) + return ServiceList(services=[service for service in services]) + + def GetService(self, request: ServiceId, context : grpc.ServicerContext) -> Service: + LOGGER.info('[GetService] request={:s}'.format(grpc_message_to_json_string(request))) + container_name = 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid)) + return get_entry(context, self.database, container_name, request.service_uuid.uuid) + + def SetService(self, request: Service, context : grpc.ServicerContext) -> ServiceId: + LOGGER.info('[SetService] request={:s}'.format(grpc_message_to_json_string(request))) + return set_entry( + self.database, 'service[{:s}]'.format(str(request.service_id.context_id.context_uuid.uuid)), + request.service_id.service_uuid.uuid, request).service_id + + def RemoveService(self, request: ServiceId, context : grpc.ServicerContext) -> Empty: + LOGGER.info('[RemoveService] request={:s}'.format(grpc_message_to_json_string(request))) + container_name = 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid)) + return del_entry(context, self.database, container_name, request.service_uuid.uuid) + + def GetServiceEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[ServiceEvent]: + LOGGER.info('[GetServiceEvents] request={:s}'.format(grpc_message_to_json_string(request))) diff --git a/src/compute/tests/MockServiceServiceServicerImpl.py b/src/compute/tests/MockServicerImpl_Service.py similarity index 59% rename from src/compute/tests/MockServiceServiceServicerImpl.py rename to src/compute/tests/MockServicerImpl_Service.py index 35da85407..75fdc3073 100644 --- a/src/compute/tests/MockServiceServiceServicerImpl.py +++ b/src/compute/tests/MockServicerImpl_Service.py @@ -1,27 +1,31 @@ -import grpc, json, logging -from google.protobuf.json_format import MessageToDict +import grpc, logging +from common.Settings import get_setting +from context.client.ContextClient import ContextClient from service.proto.context_pb2 import ConnectionList, Empty, Service, ServiceId from service.proto.service_pb2_grpc import ServiceServiceServicer +from .Tools import grpc_message_to_json_string LOGGER = logging.getLogger(__name__) -def grpc_message_to_json_string(message): - return json.dumps(MessageToDict( - message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False), - sort_keys=True) +class MockServicerImpl_Service(ServiceServiceServicer): + def __init__(self): + LOGGER.info('[__init__] Creating Servicer...') + self.context_client = ContextClient( + get_setting('CONTEXTSERVICE_SERVICE_HOST'), + get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC')) + LOGGER.info('[__init__] Servicer Created') -class MockServiceServiceServicerImpl(ServiceServiceServicer): def CreateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId: LOGGER.info('[CreateService] request={:s}'.format(grpc_message_to_json_string(request))) - return request.service_id + return self.context_client.SetService(request) def UpdateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId: LOGGER.info('[UpdateService] request={:s}'.format(grpc_message_to_json_string(request))) - return request.service_id + return self.context_client.SetService(request) def DeleteService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty: LOGGER.info('[DeleteService] request={:s}'.format(grpc_message_to_json_string(request))) - return Empty() + return self.context_client.RemoveService(request) def GetConnectionList(self, request : ServiceId, context : grpc.ServicerContext) -> ConnectionList: LOGGER.info('[GetConnectionList] request={:s}'.format(grpc_message_to_json_string(request))) diff --git a/src/compute/tests/Tools.py b/src/compute/tests/Tools.py new file mode 100644 index 000000000..a96c38ce5 --- /dev/null +++ b/src/compute/tests/Tools.py @@ -0,0 +1,7 @@ +import json +from google.protobuf.json_format import MessageToDict + +def grpc_message_to_json_string(message): + return json.dumps(MessageToDict( + message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False), + sort_keys=True) diff --git a/src/compute/tests/mock_osm/MockOSM.py b/src/compute/tests/mock_osm/MockOSM.py index f98cfed7a..c50ee6c88 100644 --- a/src/compute/tests/mock_osm/MockOSM.py +++ b/src/compute/tests/mock_osm/MockOSM.py @@ -5,43 +5,90 @@ LOGGER = logging.getLogger(__name__) WIM_USERNAME = 'admin' WIM_PASSWORD = 'admin' -WIM_MAPPING = [] -SERVICE_TYPE = 'ELAN' +# Ref: https://osm.etsi.org/wikipub/index.php/WIM +WIM_MAPPING = [ + { + 'device-id' : 'dev-1', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id' : 'ep-1', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'dev-1:ep-1:10.0.0.1'}, + 'site-id': '1', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, + { + 'device-id' : 'dev-2', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id' : 'ep-2', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'dev-2:ep-2:10.0.0.2'}, + 'site-id': '2', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, + { + 'device-id' : 'dev-3', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id' : 'ep-3', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'dev-3:ep-3:10.0.0.3'}, + 'site-id': '3', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, +] + +SERVICE_TYPE = 'ELINE' +SERVICE_CONNECTION_POINTS_1 = [ + {'service_endpoint_id': 'ep-1', + 'service_endpoint_encapsulation_type': 'dot1q', + 'service_endpoint_encapsulation_info': {'vlan': 1234}}, + {'service_endpoint_id': 'ep-2', + 'service_endpoint_encapsulation_type': 'dot1q', + 'service_endpoint_encapsulation_info': {'vlan': 1234}}, +] + +SERVICE_CONNECTION_POINTS_2 = [ + {'service_endpoint_id': 'ep-3', + 'service_endpoint_encapsulation_type': 'dot1q', + 'service_endpoint_encapsulation_info': {'vlan': 1234}}, +] class MockOSM: def __init__(self, wim_url): wim = {'wim_url': wim_url} wim_account = {'user': WIM_USERNAME, 'password': WIM_PASSWORD} - config = {'service_endpoint_mapping': WIM_MAPPING} + config = {'mapping_not_needed': False, 'service_endpoint_mapping': WIM_MAPPING} self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config) self.service_uuid = None + self.conn_info = None def create_connectivity_service(self): - connection_points = [] self.wim.check_credentials() - LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points))) - result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points) + LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(SERVICE_CONNECTION_POINTS_1))) + result = self.wim.create_connectivity_service(SERVICE_TYPE, SERVICE_CONNECTION_POINTS_1) LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result))) - self.service_uuid = None + self.service_uuid, self.conn_info = result def get_connectivity_service_status(self): - connection_points = [] self.wim.check_credentials() - LOGGER.info('[get_connectivity_service] connection_points={:s}'.format(str(connection_points))) - result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=conn_info) + result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=self.conn_info) LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result))) def edit_connectivity_service(self): - connection_points = [] self.wim.check_credentials() - LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points))) - result = self.wim.edit_connectivity_service(self.service_uuid, conn_info=conn_info, connection_points=connection_points) - LOGGER.info('[edit_connectivity_service] result={:s}'.format(str(result))) + LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(SERVICE_CONNECTION_POINTS_2))) + self.wim.edit_connectivity_service( + self.service_uuid, conn_info=self.conn_info, connection_points=SERVICE_CONNECTION_POINTS_2) def delete_connectivity_service(self): - connection_points = [] self.wim.check_credentials() - LOGGER.info('[delete_connectivity_service] connection_points={:s}'.format(str(connection_points))) - result = self.wim.delete_connectivity_service(self.service_uuid, conn_info=conn_info) - LOGGER.info('[delete_connectivity_service] result={:s}'.format(str(result))) + self.wim.delete_connectivity_service(self.service_uuid, conn_info=self.conn_info) diff --git a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py index f47c56dc8..182115bad 100644 --- a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py +++ b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py @@ -54,7 +54,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): m["service_endpoint_id"]: m for m in self.service_endpoint_mapping } self.user = wim_account.get("user") - self.passwd = wim_account.get("passwordd") + self.passwd = wim_account.get("password") # replace "passwordd" -> "password" if self.user and self.passwd is not None: self.auth = (self.user, self.passwd) @@ -177,7 +177,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): uuid_l2vpn = str(uuid.uuid4()) vpn_service = {} vpn_service["vpn-id"] = uuid_l2vpn - vpn_service["vpn-scv-type"] = "vpws" + vpn_service["vpn-svc-type"] = "vpws" # Rename "vpn-scv-type" -> "vpn-svc-type" vpn_service["svc-topo"] = "any-to-any" vpn_service["customer-name"] = "osm" vpn_service_list = [] diff --git a/src/compute/tests/test_unitary.py b/src/compute/tests/test_unitary.py index 6935ac2a8..001999f1b 100644 --- a/src/compute/tests/test_unitary.py +++ b/src/compute/tests/test_unitary.py @@ -1,34 +1,54 @@ import logging, os, pytest, time from compute.Config import RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL -from compute.service.rest_server.Server import Server -from compute.service.rest_server.resources.Compute import Compute -from service.Config import ( - GRPC_SERVICE_PORT as SERVICE_GRPC_SERVICE_PORT, GRPC_MAX_WORKERS as SERVICE_GRPC_MAX_WORKERS, - GRPC_GRACE_PERIOD as SERVICE_GRPC_GRACE_PERIOD) +from compute.service.rest_server.RestServer import RestServer +from context.proto.context_pb2_grpc import add_ContextServiceServicer_to_server +from service.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server from .mock_osm.MockOSM import MockOSM -from .MockServiceService import MockServiceService - -compute_restapi_port = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports -service_grpc_port = 10000 + SERVICE_GRPC_SERVICE_PORT # avoid privileged ports - -os.environ['SERVICESERVICE_SERVICE_HOST'] = '127.0.0.1' -os.environ['SERVICESERVICE_SERVICE_PORT_GRPC'] = str(service_grpc_port) +from .MockService import MockService +from .MockServicerImpl_Context import MockServicerImpl_Context +from .MockServicerImpl_Service import MockServicerImpl_Service LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) +LOCALHOST = '127.0.0.1' +MOCKSERVER_GRPC_PORT = 10000 +COMPUTE_RESTAPI_PORT = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports + +class MockService_ContextService(MockService): + # Mock Server implementing Context and Service to simplify unitary tests of Compute + + def __init__(self, cls_name='MockService_Service'): + super().__init__(LOCALHOST, MOCKSERVER_GRPC_PORT, cls_name=cls_name) + + # pylint: disable=attribute-defined-outside-init + def install_servicers(self): + self.context_servicer = MockServicerImpl_Context() + add_ContextServiceServicer_to_server(self.context_servicer, self.server) + self.service_servicer = MockServicerImpl_Service() + add_ServiceServiceServicer_to_server(self.service_servicer, self.server) + +os.environ['CONTEXTSERVICE_SERVICE_HOST'] = LOCALHOST +os.environ['CONTEXTSERVICE_SERVICE_PORT_GRPC'] = str(MOCKSERVER_GRPC_PORT) +os.environ['SERVICESERVICE_SERVICE_HOST'] = LOCALHOST +os.environ['SERVICESERVICE_SERVICE_PORT_GRPC'] = str(MOCKSERVER_GRPC_PORT) + +# NBI Plugin IETF L2VPN requires environment variables CONTEXTSERVICE_SERVICE_HOST, CONTEXTSERVICE_SERVICE_PORT_GRPC, +# SERVICESERVICE_SERVICE_HOST, and SERVICESERVICE_SERVICE_PORT_GRPC to work properly. +# pylint: disable=wrong-import-position,ungrouped-imports +from compute.service.rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn + @pytest.fixture(scope='session') -def service_service(): - _service = MockServiceService( - port=service_grpc_port, max_workers=SERVICE_GRPC_MAX_WORKERS, grace_period=SERVICE_GRPC_GRACE_PERIOD) +def mockservice(): + _service = MockService_ContextService() _service.start() yield _service _service.stop() @pytest.fixture(scope='session') -def compute_service_rest(service_service): - _rest_server = Server(port=compute_restapi_port, base_url=RESTAPI_BASE_URL) - _rest_server.add_resource(Compute, '/vpn-services', endpoint='l2vpn.vpn-services') +def compute_service_rest(mockservice): # pylint: disable=redefined-outer-name + _rest_server = RestServer(port=COMPUTE_RESTAPI_PORT, base_url=RESTAPI_BASE_URL) + register_ietf_l2vpn(_rest_server) _rest_server.start() time.sleep(1) # bring time for the server to start yield _rest_server @@ -36,8 +56,8 @@ def compute_service_rest(service_service): _rest_server.join() @pytest.fixture(scope='session') -def osm_wim(service_service, compute_service_rest): # pylint: disable=redefined-outer-name - wim_url = 'http://127.0.0.1:{:d}'.format(compute_restapi_port) +def osm_wim(compute_service_rest): # pylint: disable=redefined-outer-name + wim_url = 'http://{:s}:{:d}'.format(LOCALHOST, COMPUTE_RESTAPI_PORT) return MockOSM(wim_url) def test_compute_create_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name -- GitLab From b32528f8f6a8ec6af133abf22bdddb7d0a06cde1 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Wed, 5 Jan 2022 21:25:45 +0100 Subject: [PATCH 003/890] Added Compute to GitLab CI pipeline --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1e35c2cb3..c8f78f4df 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,6 +13,7 @@ include: - local: '/manifests/.gitlab-ci.yml' - local: '/src/monitoring/.gitlab-ci.yml' #- local: '/src/centralizedattackdetector/.gitlab-ci.yml' + - local: '/src/compute/.gitlab-ci.yml' - local: '/src/context/.gitlab-ci.yml' - local: '/src/device/.gitlab-ci.yml' - local: '/src/service/.gitlab-ci.yml' -- GitLab From 7b2df93a758a383a0c455d29757cf5c78061559f Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Wed, 5 Jan 2022 22:14:22 +0100 Subject: [PATCH 004/890] Solve minor issue in unitary test of Context that prevented tests to finish correctly in random cases. --- src/context/tests/test_unitary.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py index 750fa2a31..bf8857f70 100644 --- a/src/context/tests/test_unitary.py +++ b/src/context/tests/test_unitary.py @@ -318,16 +318,22 @@ def test_grpc_topology( assert response.context_uuid.uuid == DEFAULT_CONTEXT_UUID # ----- Check create event ----------------------------------------------------------------------------------------- - event = events_collector.get_event(block=True) - assert isinstance(event, TopologyEvent) - assert event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE - assert event.topology_id.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID - assert event.topology_id.topology_uuid.uuid == DEFAULT_TOPOLOGY_UUID - - event = events_collector.get_event(block=True) - assert isinstance(event, ContextEvent) - assert event.event.event_type == EventTypeEnum.EVENTTYPE_UPDATE - assert event.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID + context_event = None + topology_event = None + for _ in range(2): + event = events_collector.get_event(block=True) + assert isinstance(event, ContextEvent, TopologyEvent) + if isinstance(event, ContextEvent): context_event = event + if isinstance(event, TopologyEvent): topology_event = event + + assert context_event is not None + assert context_event.event.event_type == EventTypeEnum.EVENTTYPE_UPDATE + assert context_event.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID + + assert topology_event is not None + assert topology_event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE + assert topology_event.topology_id.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID + assert topology_event.topology_id.topology_uuid.uuid == DEFAULT_TOPOLOGY_UUID # ----- Update the object ------------------------------------------------------------------------------------------ response = context_client_grpc.SetTopology(Topology(**TOPOLOGY)) -- GitLab From a81f447b0d2161b7b4412bfad5a38bcdf72ab454 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 09:59:46 +0100 Subject: [PATCH 005/890] Fixing Gitlab CI for Context and Compute components --- manifests/computeservice.yaml | 10 ++++++++++ manifests/contextservice.yaml | 2 ++ src/context/tests/test_unitary.py | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/manifests/computeservice.yaml b/manifests/computeservice.yaml index cdca52eb8..73380f75d 100644 --- a/manifests/computeservice.yaml +++ b/manifests/computeservice.yaml @@ -17,6 +17,7 @@ spec: image: registry.gitlab.com/teraflow-h2020/controller/compute:latest imagePullPolicy: Always ports: + - containerPort: 8080 - containerPort: 9090 env: - name: LOG_LEVEL @@ -44,7 +45,12 @@ spec: selector: app: computeservice ports: + - name: http + protocol: TCP + port: 8080 + targetPort: 8080 - name: grpc + protocol: TCP port: 9090 targetPort: 9090 --- @@ -59,6 +65,10 @@ spec: selector: app: computeservice ports: + - name: http + protocol: TCP + port: 8080 + targetPort: 8080 - name: grpc protocol: TCP port: 9090 diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml index c0ea046e0..6c72da1dd 100644 --- a/manifests/contextservice.yaml +++ b/manifests/contextservice.yaml @@ -64,9 +64,11 @@ spec: app: contextservice ports: - name: grpc + protocol: TCP port: 1010 targetPort: 1010 - name: http + protocol: TCP port: 8080 targetPort: 8080 --- diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py index bf8857f70..5836511e1 100644 --- a/src/context/tests/test_unitary.py +++ b/src/context/tests/test_unitary.py @@ -322,7 +322,7 @@ def test_grpc_topology( topology_event = None for _ in range(2): event = events_collector.get_event(block=True) - assert isinstance(event, ContextEvent, TopologyEvent) + assert isinstance(event, (ContextEvent, TopologyEvent)) if isinstance(event, ContextEvent): context_event = event if isinstance(event, TopologyEvent): topology_event = event -- GitLab From 304ecc9c48fb722ddd0b7b4ab8cc9f66f7916354 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:07:38 +0100 Subject: [PATCH 006/890] Fixing Gitlab CI for Compute component --- src/compute/service/ComputeService.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compute/service/ComputeService.py b/src/compute/service/ComputeService.py index 36d43283c..51a15472b 100644 --- a/src/compute/service/ComputeService.py +++ b/src/compute/service/ComputeService.py @@ -24,9 +24,9 @@ class ComputeService: self.server = None def start(self): - self.endpoint = '{}:{}'.format(self.address, self.port) - LOGGER.debug('Starting Service (tentative endpoint: {}, max_workers: {})...'.format( - self.endpoint, self.max_workers)) + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port)) + LOGGER.debug('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format( + str(self.endpoint), str(self.max_workers))) self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers) self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,)) @@ -39,15 +39,15 @@ class ComputeService: add_HealthServicer_to_server(self.health_servicer, self.server) port = self.server.add_insecure_port(self.endpoint) - self.endpoint = '{}:{}'.format(self.address, port) - LOGGER.info('Listening on {}...'.format(self.endpoint)) + self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port)) + LOGGER.info('Listening on {:s}...'.format(str(self.endpoint))) self.server.start() self.health_servicer.set(OVERALL_HEALTH, HealthCheckResponse.SERVING) # pylint: disable=maybe-no-member LOGGER.debug('Service started') def stop(self): - LOGGER.debug('Stopping service (grace period {} seconds)...'.format(self.grace_period)) + LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period))) self.health_servicer.enter_graceful_shutdown() self.server.stop(self.grace_period) LOGGER.debug('Service stopped') -- GitLab From 018a46de7c8701ce6b38f7cb905e7e452a2ff6ba Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:17:33 +0100 Subject: [PATCH 007/890] Fixing GitLab CI for Compute --- src/compute/.gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml index 948092ea3..cc0ca4213 100644 --- a/src/compute/.gitlab-ci.yml +++ b/src/compute/.gitlab-ci.yml @@ -36,9 +36,10 @@ unit test compute: - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - - docker run --name $IMAGE_NAME -d -p 9090:9090 --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG + - docker run --name $IMAGE_NAME -d -p 9090:9090 --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 5 - docker ps -a + - docker logs $IMAGE_NAME - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py" after_script: - docker rm -f $IMAGE_NAME -- GitLab From 0a5b780794ee348e5b3b8803aafb0756d4caacd4 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:20:14 +0100 Subject: [PATCH 008/890] Fixing GitLab CI for Compute --- src/compute/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compute/Dockerfile b/src/compute/Dockerfile index 83e4fad35..4eabaf912 100644 --- a/src/compute/Dockerfile +++ b/src/compute/Dockerfile @@ -30,6 +30,7 @@ RUN python3 -m pip install -r compute/requirements.in # Add files into working directory COPY common/. common COPY compute/. compute +COPY service/. service # Start compute service ENTRYPOINT ["python", "-m", "compute.service"] -- GitLab From fa12e93c219d62378a8afc113b7ff3ff6d016494 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:22:41 +0100 Subject: [PATCH 009/890] Fixing GitLab CI for Compute --- src/compute/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compute/Dockerfile b/src/compute/Dockerfile index 4eabaf912..99d4e3ed1 100644 --- a/src/compute/Dockerfile +++ b/src/compute/Dockerfile @@ -30,6 +30,7 @@ RUN python3 -m pip install -r compute/requirements.in # Add files into working directory COPY common/. common COPY compute/. compute +COPY context/. context COPY service/. service # Start compute service -- GitLab From 8c8cb30396aae0ef91cdff41c28893d19fc29c73 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:24:28 +0100 Subject: [PATCH 010/890] Fixing GitLab CI for Compute --- src/compute/requirements.in | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compute/requirements.in b/src/compute/requirements.in index a8029e523..42a56f905 100644 --- a/src/compute/requirements.in +++ b/src/compute/requirements.in @@ -7,3 +7,4 @@ jsonschema prometheus-client pytest pytest-benchmark +requests -- GitLab From 160900f33d7411e60cf4bbaaa60683b77258394c Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 10:32:04 +0100 Subject: [PATCH 011/890] Fixing GitLab CI for Compute --- src/context/.gitlab-ci.yml | 5 +++-- src/device/.gitlab-ci.yml | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml index 23949213f..9fbad71bc 100644 --- a/src/context/.gitlab-ci.yml +++ b/src/context/.gitlab-ci.yml @@ -38,10 +38,11 @@ unit test context: script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker pull "redis:6.2" - - docker run --name redis -d --network=teraflowbridge --rm redis:6.2 - - docker run --name $IMAGE_NAME -d -p 1010:1010 --env "DB_BACKEND=redis" --env "REDIS_SERVICE_HOST=redis" --env "REDIS_SERVICE_PORT=6379" --env "REDIS_DATABASE_ID=0" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG + - docker run --name redis -d --network=teraflowbridge redis:6.2 + - docker run --name $IMAGE_NAME -d -p 1010:1010 --env "DB_BACKEND=redis" --env "REDIS_SERVICE_HOST=redis" --env "REDIS_SERVICE_PORT=6379" --env "REDIS_DATABASE_ID=0" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 10 - docker ps -a + - docker logs $IMAGE_NAME - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py" after_script: - docker rm -f $IMAGE_NAME diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml index 8656e01fe..5868c6884 100644 --- a/src/device/.gitlab-ci.yml +++ b/src/device/.gitlab-ci.yml @@ -36,9 +36,10 @@ unit test device: - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - - docker run --name $IMAGE_NAME -d -p 2020:2020 --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG + - docker run --name $IMAGE_NAME -d -p 2020:2020 --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 5 - docker ps -a + - docker logs $IMAGE_NAME - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py" after_script: - docker rm -f $IMAGE_NAME -- GitLab From 0d12a3f653077bee6845754bbe754f89fa33fa10 Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Fri, 7 Jan 2022 11:36:06 +0100 Subject: [PATCH 012/890] Fixing GitLab CI for Compute --- manifests/contextservice.yaml | 2 ++ src/compute/.gitlab-ci.yml | 4 ++-- src/context/.gitlab-ci.yml | 4 ++-- src/device/.gitlab-ci.yml | 4 ++-- src/service/.gitlab-ci.yml | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml index 6c72da1dd..7ccf3e4f0 100644 --- a/manifests/contextservice.yaml +++ b/manifests/contextservice.yaml @@ -34,6 +34,8 @@ spec: env: - name: DB_BACKEND value: "redis" + - name: MB_BACKEND + value: "redis" - name: REDIS_DATABASE_ID value: "0" - name: LOG_LEVEL diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml index cc0ca4213..d10d5acfb 100644 --- a/src/compute/.gitlab-ci.yml +++ b/src/compute/.gitlab-ci.yml @@ -10,8 +10,8 @@ build compute: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -# after_script: -# - docker rmi $(docker images --quiet --filter=dangling=true) + after_script: + - docker images --filter="dangling=true" --quiet | xargs -r docker rmi rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml index 9fbad71bc..bae78b86d 100644 --- a/src/context/.gitlab-ci.yml +++ b/src/context/.gitlab-ci.yml @@ -10,8 +10,8 @@ build context: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -# after_script: -# - docker rmi $(docker images --quiet --filter=dangling=true) + after_script: + - docker images --filter="dangling=true" --quiet | xargs -r docker rmi rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml index 5868c6884..2c93618af 100644 --- a/src/device/.gitlab-ci.yml +++ b/src/device/.gitlab-ci.yml @@ -10,8 +10,8 @@ build device: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -# after_script: -# - docker rmi $(docker images --quiet --filter=dangling=true) + after_script: + - docker images --filter="dangling=true" --quiet | xargs -r docker rmi rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' diff --git a/src/service/.gitlab-ci.yml b/src/service/.gitlab-ci.yml index d47177171..3c943d543 100644 --- a/src/service/.gitlab-ci.yml +++ b/src/service/.gitlab-ci.yml @@ -10,8 +10,8 @@ build service: - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/ - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" -# after_script: -# - docker rmi $(docker images --quiet --filter=dangling=true) + after_script: + - docker images --filter="dangling=true" --quiet | xargs -r docker rmi rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' -- GitLab From e790ac99ce9c86d0576cf0cc87b92f7116cc37aa Mon Sep 17 00:00:00 2001 From: Lluis Gifre Date: Thu, 13 Jan 2022 16:47:40 +0100 Subject: [PATCH 013/890] Solved bug in IETF L2VPN Service Handler - service was created instead of updated. --- .../nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py index 639e8c63f..1f02e50a4 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py @@ -125,7 +125,7 @@ def process_list_site_network_access( for site_network_access in request_data['ietf-l2vpn-svc:site-network-access']: try: service_request = process_site_network_access(context_client, site_network_access) - service_reply = service_client.CreateService(service_request) + service_reply = service_client.UpdateService(service_request) if service_reply != service_request.service_id: # pylint: disable=no-member raise Exception('Service update failed. Wrong Service Id was returned') except Exception as e: # pylint: disable=broad-except -- GitLab From b156435b18d7845a850ed3651fbdcd2e9f2f27dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?= Date: Wed, 27 Jul 2022 13:29:40 +0000 Subject: [PATCH 014/890] Added new entrypoint for REST NBI - Added subfolder rest_server/nbi_plugins/ietf_network_slice - Modified and created classes to register new URLs in the REST server - Skeleton for methods GET/POST/DELETE - Refactoring: moved "tools" subfolder one level up --- src/compute/service/__main__.py | 5 +- .../nbi_plugins/ietf_l2vpn/L2VPN_Service.py | 6 +- .../nbi_plugins/ietf_l2vpn/L2VPN_Services.py | 6 +- .../ietf_l2vpn/L2VPN_SiteNetworkAccesses.py | 8 +- .../ietf_network_slice/NSS_Service.py | 45 +++ .../ietf_network_slice/NSS_Services.py | 44 +++ .../ietf_network_slice/__init__.py | 32 +++ .../ietf-network-slice-service.txt | 261 ++++++++++++++++++ .../{ietf_l2vpn => }/tools/Authentication.py | 0 .../{ietf_l2vpn => }/tools/ContextMethods.py | 0 .../{ietf_l2vpn => }/tools/HttpStatusCodes.py | 0 .../{ietf_l2vpn => }/tools/Validator.py | 0 .../{ietf_l2vpn => }/tools/__init__.py | 0 13 files changed, 396 insertions(+), 11 deletions(-) create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/Authentication.py (100%) rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/ContextMethods.py (100%) rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/HttpStatusCodes.py (100%) rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/Validator.py (100%) rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/__init__.py (100%) diff --git a/src/compute/service/__main__.py b/src/compute/service/__main__.py index 345b2fdd6..cfd65e1de 100644 --- a/src/compute/service/__main__.py +++ b/src/compute/service/__main__.py @@ -21,6 +21,7 @@ from common.Settings import ( from .ComputeService import ComputeService from .rest_server.RestServer import RestServer from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn +from .rest_server.nbi_plugins.ietf_network_slice import register_ietf_nss terminate = threading.Event() LOGGER = None @@ -54,8 +55,10 @@ def main(): grpc_service = ComputeService() grpc_service.start() + # Starting Rest Server rest_server = RestServer() - register_ietf_l2vpn(rest_server) + register_ietf_l2vpn(rest_server) # Registering L2VPN entrypoint + register_ietf_nss(rest_server) # Registering NSS entrypoint rest_server.start() # Wait for Ctrl+C or termination signal diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py index c77d714a9..aad85240a 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py @@ -20,9 +20,9 @@ from common.Constants import DEFAULT_CONTEXT_UUID from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, SliceStatusEnum from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient -from .tools.Authentication import HTTP_AUTH -from .tools.ContextMethods import get_service, get_slice -from .tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR +from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH +from compute.service.rest_server.nbi_plugins.tools.ContextMethods import get_service, get_slice +from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR LOGGER = logging.getLogger(__name__) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py index 7b959b289..7dbdfd37a 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py @@ -23,9 +23,9 @@ from common.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum from service.client.ServiceClient import ServiceClient from slice.client.SliceClient import SliceClient from .schemas.vpn_service import SCHEMA_VPN_SERVICE -from .tools.Authentication import HTTP_AUTH -from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR -from .tools.Validator import validate_message +from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR +from compute.service.rest_server.nbi_plugins.tools.Validator import validate_message +from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH LOGGER = logging.getLogger(__name__) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py index 8be63895b..609828b1a 100644 --- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py +++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py @@ -26,10 +26,10 @@ from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient from slice.client.SliceClient import SliceClient from .schemas.site_network_access import SCHEMA_SITE_NETWORK_ACCESS -from .tools.Authentication import HTTP_AUTH -from .tools.ContextMethods import get_service, get_slice -from .tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR -from .tools.Validator import validate_message +from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH +from compute.service.rest_server.nbi_plugins.tools.ContextMethods import get_service, get_slice +from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR +from compute.service.rest_server.nbi_plugins.tools.Validator import validate_message from .Constants import BEARER_MAPPINGS, DEFAULT_ADDRESS_FAMILIES, DEFAULT_BGP_AS, DEFAULT_BGP_ROUTE_TARGET, DEFAULT_MTU LOGGER = logging.getLogger(__name__) diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py new file mode 100644 index 000000000..9c7c11603 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py @@ -0,0 +1,45 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from flask.json import jsonify +from flask_restful import Resource +from flask import request +from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH +from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_OK + +LOGGER = logging.getLogger(__name__) + +class NSS_Service(Resource): + @HTTP_AUTH.login_required + def get(self, slice_id : str): + LOGGER.debug('GET Slice ID: {:s}'.format(str(slice_id))) + LOGGER.debug('GET Request: {:s}'.format(str(request))) + + # TODO Return information and status about requested slice + + response = jsonify({"message": "Requested info for slice {:s}".format(slice_id)}) + response.status_code = HTTP_OK + return response + + @HTTP_AUTH.login_required + def delete(self, slice_id : str): + LOGGER.debug('DELETE Slice ID: {:s}'.format(str(slice_id))) + LOGGER.debug('DELETE Request: {:s}'.format(str(request))) + + # TODO Delete the requested slice + + response = jsonify({"message": "Deletion request for slice {:s}".format(slice_id)}) + response.status_code = HTTP_OK + return response diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py new file mode 100644 index 000000000..08f1dced4 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py @@ -0,0 +1,44 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +from typing import Dict +from flask.json import jsonify +from flask_restful import Resource +from flask import request +from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH +from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_BADREQUEST, HTTP_OK +from werkzeug.exceptions import UnsupportedMediaType + +LOGGER = logging.getLogger(__name__) + +class NSS_Services(Resource): + @HTTP_AUTH.login_required + def get(self): + response = jsonify({"message": "All went well!"}) + response.status_code + + # TODO Return list of current network-slice-services + return response + + @HTTP_AUTH.login_required + def post(self): + if not request.is_json: raise UnsupportedMediaType('JSON payload is required') + request_data : Dict = request.json + LOGGER.debug('POST Request: {:s}'.format(str(request_data))) + + # TODO Parse network-slice-service request and cascade to Slice and Policy componentes + response = jsonify({"message" : "POST message received correctly"}) + response.status_code = HTTP_OK + return response \ No newline at end of file diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py new file mode 100644 index 000000000..aa45206cd --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py @@ -0,0 +1,32 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# IETF draft-ietf-teas-ietf-network-slice-nbi-yang-02 - IETF Network Slice Service YANG Model +# Ref: https://datatracker.ietf.org/doc/draft-ietf-teas-ietf-network-slice-nbi-yang/ + +from flask_restful import Resource +from compute.service.rest_server.RestServer import RestServer +from .NSS_Services import NSS_Services +from .NSS_Service import NSS_Service + +URL_PREFIX = '/ietf-network-slice-service:ietf-nss' + +def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs): + urls = [(URL_PREFIX + url) for url in urls] + rest_server.add_resource(resource, *urls, **kwargs) + +def register_ietf_nss(rest_server : RestServer): + _add_resource(rest_server, NSS_Services, '/network-slice-services') + _add_resource(rest_server, NSS_Service, '/network-slice-services/slice-service=') + \ No newline at end of file diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt new file mode 100644 index 000000000..b81498dd8 --- /dev/null +++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt @@ -0,0 +1,261 @@ +# IETF draft-ietf-teas-ietf-network-slice-nbi-yang-02 - IETF Network Slice Service YANG Model +# Ref: https://datatracker.ietf.org/doc/draft-ietf-teas-ietf-network-slice-nbi-yang/ + +module: ietf-network-slice-service + +--rw network-slice-services + +--rw slo-sle-templates + | +--rw slo-sle-template* [id] + | +--rw id string + | +--rw template-description? string + +--rw slice-service* [service-id] + +--rw service-id string + +--rw service-description? string + +--rw service-tags + | +--rw tag-type* [tag-type] + | | +--rw tag-type identityref + | | +--rw value* string + | +--rw tag-opaque* [tag-name] + | +--rw tag-name string + | +--rw value* string + +--rw (slo-sle-policy)? + | +--:(standard) + | | +--rw slo-sle-template? leafref + | +--:(custom) + | +--rw service-slo-sle-policy + | +--rw policy-description? string + | +--rw metric-bounds + | | +--rw metric-bound* [metric-type] + | | +--rw metric-type identityref + | | +--rw metric-unit string + | | +--rw value-description? string + | | +--rw bound? uint64 + | +--rw security* identityref + | +--rw isolation? identityref + | +--rw max-occupancy-level? uint8 + | +--rw mtu? uint16 + | +--rw steering-constraints + | +--rw path-constraints + | +--rw service-function + +--rw status + | +--rw admin-status + | | +--rw status? identityref + | | +--rw last-updated? yang:date-and-time + | +--ro oper-status + | +--ro status? identityref + | +--ro last-updated? yang:date-and-time + +--rw sdps + | +--rw sdp* [sdp-id] + | +--rw sdp-id string + | +--rw sdp-description? string + | +--rw location + | | +--rw altitude? int64 + | | +--rw latitude? decimal64 + | | +--rw longitude? decimal64 + | +--rw node-id? string + | +--rw sdp-ip? inet:ip-address + | +--rw service-match-criteria + | | +--rw match-criterion* [index] + | | +--rw index uint32 + | | +--rw match-type + | | | identityref + | | +--rw value* string + | | +--rw target-connection-group-id leafref + | | +--rw connection-group-sdp-role? + | | | identityref + | | +--rw target-connectivity-construct-id? leafref + | +--rw sdp-peering + | | +--rw protocol* [protocol-type] + | | | +--rw protocol-type identityref + | | | +--rw attribute* [attribute-type] + | | | +--rw attribute-type identityref + | | | +--rw value* string + | | +--rw opaque* [attribute-name] + | | +--rw attribute-name string + | | +--rw value* string + | +--rw attachment-circuits + | | +--rw attachment-circuit* [ac-id] + | | +--rw ac-id string + | | +--rw ac-description? string + | | +--rw ac-node-id? string + | | +--rw ac-tp-id? string + | | +--rw ac-ip-address? inet:ip-address + | | +--rw ac-ip-prefix-length? uint8 + | | +--rw ac-qos-policy-name? string + | | +--rw mtu? uint16 + | | +--rw ac-tags + | | | +--rw ac-tags* [ac-tag-type] + | | | | +--rw ac-tag-type identityref + | | | | +--rw value* string + | | | +--rw ac-tag-opaque* [tag-name] + | | | +--rw tag-name string + | | | +--rw value* string + | | +--rw service-match-criteria + | | | +--rw match-criterion* [index] + | | | +--rw index + | | | | uint32 + | | | +--rw match-type + | | | | identityref + | | | +--rw value* + | | | | string + | | | +--rw target-connection-group-id leafref + | | | +--rw connection-group-sdp-role? + | | | | identityref + | | | +--rw target-connectivity-construct-id? leafref + | | +--rw sdp-peering + | | | +--rw protocol* [protocol-type] + | | | | +--rw protocol-type identityref + | | | | +--rw attribute* [attribute-type] + | | | | +--rw attribute-type identityref + | | | | +--rw value* string + | | | +--rw opaque* [attribute-name] + | | | +--rw attribute-name string + | | | +--rw value* string + | | +--rw incoming-rate-limits + | | | +--rw cir? uint64 + | | | +--rw cbs? uint64 + | | | +--rw eir? uint64 + | | | +--rw ebs? uint64 + | | | +--rw pir? uint64 + | | | +--rw pbs? uint64 + | | +--rw outgoing-rate-limits + | | +--rw cir? uint64 + | | +--rw cbs? uint64 + | | +--rw eir? uint64 + | | +--rw ebs? uint64 + | | +--rw pir? uint64 + | | +--rw pbs? uint64 + | +--rw incoming-rate-limits + | | +--rw cir? uint64 + | | +--rw cbs? uint64 + | | +--rw eir? uint64 + | | +--rw ebs? uint64 + | | +--rw pir? uint64 + | | +--rw pbs? uint64 + | +--rw outgoing-rate-limits + | | +--rw cir? uint64 + | | +--rw cbs? uint64 + | | +--rw eir? uint64 + | | +--rw ebs? uint64 + | | +--rw pir? uint64 + | | +--rw pbs? uint64 + | +--rw status + | | +--rw admin-status + | | | +--rw status? identityref + | | | +--rw last-updated? yang:date-and-time + | | +--ro oper-status + | | +--ro status? identityref + | | +--ro last-updated? yang:date-and-time + | +--ro sdp-monitoring + | +--ro incoming-utilized-bandwidth? + | | te-types:te-bandwidth + | +--ro incoming-bw-utilization decimal64 + | +--ro outgoing-utilized-bandwidth? + | | te-types:te-bandwidth + | +--ro outgoing-bw-utilization decimal64 + +--rw connection-groups + +--rw connection-group* [connection-group-id] + +--rw connection-group-id string + +--rw connectivity-type? identityref + +--rw (slo-sle-policy)? + | +--:(standard) + | | +--rw slo-sle-template? leafref + | +--:(custom) + | +--rw service-slo-sle-policy + | +--rw policy-description? string + | +--rw metric-bounds + | | +--rw metric-bound* [metric-type] + | | +--rw metric-type identityref + | | +--rw metric-unit string + | | +--rw value-description? string + | | +--rw bound? uint64 + | +--rw security* identityref + | +--rw isolation? identityref + | +--rw max-occupancy-level? uint8 + | +--rw mtu? uint16 + | +--rw steering-constraints + | +--rw path-constraints + | +--rw service-function + +--rw connectivity-construct* [cc-id] + | +--rw cc-id uint32 + | +--rw (connectivity-construct-type)? + | | +--:(p2p) + | | | +--rw p2p-sender-sdp? + | | | | -> ../../../../sdps/sdp/sdp-id + | | | +--rw p2p-receiver-sdp? + | | | -> ../../../../sdps/sdp/sdp-id + | | +--:(p2mp) + | | | +--rw p2mp-sender-sdp? + | | | | -> ../../../../sdps/sdp/sdp-id + | | | +--rw p2mp-receiver-sdp* + | | | -> ../../../../sdps/sdp/sdp-id + | | +--:(a2a) + | | +--rw a2a-sdp* [sdp-id] + | | +--rw sdp-id + | | | -> ../../../../../sdps/sdp/sdp-id + | | +--rw (slo-sle-policy)? + | | +--:(standard) + | | | +--rw slo-sle-template? leafref + | | +--:(custom) + | | +--rw service-slo-sle-policy + | | +--rw policy-description? + | | | string + | | +--rw metric-bounds + | | | +--rw metric-bound* + | | | [metric-type] + | | | +--rw metric-type + | | | | identityref + | | | +--rw metric-unit + | | | | string + | | | +--rw value-description? + | | | | string + | | | +--rw bound? + | | | uint64 + | | +--rw security* + | | | identityref + | | +--rw isolation? + | | | identityref + | | +--rw max-occupancy-level? + | | | uint8 + | | +--rw mtu? + | | | uint16 + | | +--rw steering-constraints + | | +--rw path-constraints + | | +--rw service-function + | +--rw (slo-sle-policy)? + | | +--:(standard) + | | | +--rw slo-sle-template? leafref + | | +--:(custom) + | | +--rw service-slo-sle-policy + | | +--rw policy-description? string + | | +--rw metric-bounds + | | | +--rw metric-bound* [metric-type] + | | | +--rw metric-type + | | | | identityref + | | | +--rw metric-unit string + | | | +--rw value-description? string + | | | +--rw bound? uint64 + | | +--rw security* identityref + | | +--rw isolation? identityref + | | +--rw max-occupancy-level? uint8 + | | +--rw mtu? uint16 + | | +--rw steering-constraints + | | +--rw path-constraints + | | +--rw service-function + | +--ro connectivity-construct-monitoring + | +--ro one-way-min-delay? uint32 + | +--ro one-way-max-delay? uint32 + | +--ro one-way-delay-variation? uint32 + | +--ro one-way-packet-loss? decimal64 + | +--ro two-way-min-delay? uint32 + | +--ro two-way-max-delay? uint32 + | +--ro two-way-delay-variation? uint32 + | +--ro two-way-packet-loss? decimal64 + +--ro connection-group-monitoring + +--ro one-way-min-delay? uint32 + +--ro one-way-max-delay? uint32 + +--ro one-way-delay-variation? uint32 + +--ro one-way-packet-loss? decimal64 + +--ro two-way-min-delay? uint32 + +--ro two-way-max-delay? uint32 + +--ro two-way-delay-variation? uint32 + +--ro two-way-packet-loss? decimal64 \ No newline at end of file diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py b/src/compute/service/rest_server/nbi_plugins/tools/Authentication.py similarity index 100% rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py rename to src/compute/service/rest_server/nbi_plugins/tools/Authentication.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/ContextMethods.py b/src/compute/service/rest_server/nbi_plugins/tools/ContextMethods.py similarity index 100% rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/ContextMethods.py rename to src/compute/service/rest_server/nbi_plugins/tools/ContextMethods.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py b/src/compute/service/rest_server/nbi_plugins/tools/HttpStatusCodes.py similarity index 100% rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py rename to src/compute/service/rest_server/nbi_plugins/tools/HttpStatusCodes.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py b/src/compute/service/rest_server/nbi_plugins/tools/Validator.py similarity index 100% rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py rename to src/compute/service/rest_server/nbi_plugins/tools/Validator.py diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py b/src/compute/service/rest_server/nbi_plugins/tools/__init__.py similarity index 100% rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py rename to src/compute/service/rest_server/nbi_plugins/tools/__init__.py -- GitLab From b0fc762c49c1cdc15ba26dd4a2903b0861830dec Mon Sep 17 00:00:00 2001 From: luiscal4a Date: Tue, 30 Aug 2022 12:23:15 +0200 Subject: [PATCH 015/890] Added service_id, ip_d and port_o to ensure traceability accross components --- proto/l3_attackmitigator.proto | 21 +- proto/l3_centralizedattackdetector.proto | 7 +- .../l3_attackmitigatorServiceServicerImpl.py | 238 +++++++++++++++++- ...alizedattackdetectorServiceServicerImpl.py | 28 ++- 4 files changed, 263 insertions(+), 31 deletions(-) diff --git a/proto/l3_attackmitigator.proto b/proto/l3_attackmitigator.proto index 39333718a..532f2b6fd 100644 --- a/proto/l3_attackmitigator.proto +++ b/proto/l3_attackmitigator.proto @@ -27,13 +27,16 @@ service L3Attackmitigator{ message L3AttackmitigatorOutput { float confidence = 1; string timestamp = 2; - string ip_o = 3; - string tag_name = 4; - int32 tag = 5; - string flow_id = 6; - string protocol = 7; - string port_d = 8; - string ml_id = 9; - float time_start = 10; - float time_end = 11; + string ip_o = 3; + string ip_d = 4; + string tag_name = 5; + int32 tag = 6; + string flow_id = 7; + string protocol = 8; + string port_o = 9; + string port_d = 10; + string ml_id = 11; + string service_id = 12; + float time_start = 13; + float time_end = 14; } diff --git a/proto/l3_centralizedattackdetector.proto b/proto/l3_centralizedattackdetector.proto index 3cb1b0991..e3358dcd7 100644 --- a/proto/l3_centralizedattackdetector.proto +++ b/proto/l3_centralizedattackdetector.proto @@ -43,9 +43,10 @@ message L3CentralizedattackdetectorMetrics { string ip_d = 11; string port_d = 12; string flow_id = 13; - string protocol = 14; - float time_start = 15; - float time_end = 16; + string service_id = 14; + string protocol = 15; + float time_start = 16; + float time_end = 17; } message Empty { diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py index 866470452..e53bcd214 100644 --- a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py +++ b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py @@ -14,41 +14,261 @@ from __future__ import print_function import logging -from common.proto.l3_attackmitigator_pb2 import ( - EmptyMitigator +from common.proto.l3_centralizedattackdetector_pb2 import ( + Empty ) from common.proto.l3_attackmitigator_pb2_grpc import ( L3AttackmitigatorServicer, ) +from common.proto.context_pb2 import ( + Service, ServiceId, ServiceConfig, ServiceTypeEnum, ServiceStatusEnum, ServiceStatus, Context, ContextId, Uuid, Timestamp, ConfigRule, ConfigRule_Custom, ConfigActionEnum, Device, DeviceId, DeviceConfig, DeviceOperationalStatusEnum, DeviceDriverEnum, EndPoint, Link, LinkId, EndPoint, EndPointId, Topology, TopologyId +) +from common.proto.context_pb2_grpc import ( + ContextServiceStub +) +from common.proto.service_pb2_grpc import ( + ServiceServiceStub +) +from datetime import datetime +import grpc LOGGER = logging.getLogger(__name__) +CONTEXT_CHANNEL = "192.168.165.78:1010" +SERVICE_CHANNEL = "192.168.165.78:3030" class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): + def GetNewService(self, service_id): + service = Service() + service_id_obj = self.GenerateServiceId(service_id) + """ + ServiceId() + context_id = ContextId() + uuid = Uuid() + uuid.uuid = service_id + context_id.context_uuid.CopyFrom(uuid) + service_id_obj.context_id.CopyFrom(context_id) + service_id_obj.service_uuid.CopyFrom(uuid) + """ + service.service_id.CopyFrom(service_id_obj) + service.service_type = ServiceTypeEnum.SERVICETYPE_L3NM + service_status = ServiceStatus() + service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE + service.service_status.CopyFrom(service_status) + timestamp = Timestamp() + timestamp.timestamp = datetime.timestamp(datetime.now()) + service.timestamp.CopyFrom(timestamp) + return service + + def GetNewContext(self, service_id): + context = Context() + context_id = ContextId() + uuid = Uuid() + uuid.uuid = service_id + context_id.context_uuid.CopyFrom(uuid) + context.context_id.CopyFrom(context_id) + return context + + def GetNewDevice(self, service_id): + device = Device() + device_id = DeviceId() + uuid = Uuid() + uuid.uuid = service_id + device_id.device_uuid.CopyFrom(uuid) + device.device_type="test" + device.device_id.CopyFrom(device_id) + device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED + return device + + def GetNewLink(self, service_id): + link = Link() + link_id = LinkId() + uuid = Uuid() + uuid.uuid = service_id + link_id.link_uuid.CopyFrom(uuid) + link.link_id.CopyFrom(link_id) + return link + + def GetNewTopology(self,context_id, device_id, link_id): + topology = Topology() + topology_id = TopologyId() + topology_id.context_id.CopyFrom(context_id) + uuid = Uuid() + uuid.uuid = "test_crypto" + topology_id.topology_uuid.CopyFrom(uuid) + topology.topology_id.CopyFrom(topology_id) + topology.device_ids.extend([device_id]) + topology.link_ids.extend([link_id]) + return topology + + def GetNewEndpoint(self, topology_id, device_id, uuid_name): + endpoint = EndPoint() + endpoint_id = EndPointId() + endpoint_id.topology_id.CopyFrom(topology_id) + endpoint_id.device_id.CopyFrom(device_id) + uuid = Uuid() + uuid.uuid = uuid_name + endpoint_id.endpoint_uuid.CopyFrom(uuid) + endpoint.endpoint_id.CopyFrom(endpoint_id) + endpoint.endpoint_type = "test" + return endpoint + + def __init__(self): LOGGER.debug("Creating Servicer...") self.last_value = -1 self.last_tag = 0 - + + context = self.GetNewContext("test_crypto") + print(context, flush=True) + print(self.SetContext(context)) + + service = self.GetNewService("test_crypto") + print("This is the new service", self.CreateService(service), flush = True) + + ip_o = "127.0.0.1" + ip_d = "127.0.0.2" + port_o = "123" + port_d = "124" + + service_id = self.GenerateServiceId("test_crypto") + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + service = self.GetService(service_id) + print("Service obtained from id", service, flush=True) + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + #service_config = service.service_config + #service_config.append(config_rule) + + service_config = ServiceConfig() + service_config.config_rules.extend([config_rule]) + service.service_config.CopyFrom(service_config) + + device = self.GetNewDevice("test_crypto") + print("New device", device, flush=True) + device_id = self.SetDevice(device) + + link = self.GetNewLink("test_crypto") + print("New link", link, flush=True) + link_id = self.SetLink(link) + + topology = self.GetNewTopology(context.context_id, device.device_id, link.link_id) + print("New topology", topology, flush=True) + topology_id = self.SetTopology(topology) + + endpoint = self.GetNewEndpoint(topology.topology_id, device.device_id, "test_crypto") + print("New endpoint", endpoint, flush=True) + link.link_endpoint_ids.extend([endpoint.endpoint_id]) + + self.SetLink(link) + + print("Service with new rule", service, flush=True) + self.UpdateService(service) + + service2 = self.GetService(service_id) + print("Service obtained from id after updating", service2, flush=True) + + + def GenerateRuleValue(self, ip_o, ip_d, port_o, port_d): + value = { + 'ipv4:source-address': ip_o, + 'ipv4:destination-address': ip_d, + 'transport:source-port': port_o, + 'transport:destination-port': port_d, + 'forwarding-action': 'DROP', + } + return value + + def GetConfigRule(self, ip_o, ip_d, port_o, port_d): + config_rule = ConfigRule() + config_rule_custom = ConfigRule_Custom() + config_rule.action = ConfigActionEnum.CONFIGACTION_SET + config_rule_custom.resource_key = 'test' + config_rule_custom.resource_value = str(self.GenerateRuleValue(ip_o, ip_d, port_o, port_d)) + config_rule.custom.CopyFrom(config_rule_custom) + return config_rule + + def GenerateServiceId(self, service_id): + service_id_obj = ServiceId() + context_id = ContextId() + uuid = Uuid() + uuid.uuid = service_id + context_id.context_uuid.CopyFrom(uuid) + service_id_obj.context_id.CopyFrom(context_id) + service_id_obj.service_uuid.CopyFrom(uuid) + return service_id_obj + def SendOutput(self, request, context): # SEND CONFIDENCE TO MITIGATION SERVER - logging.debug("") - print("Server received mitigation values...", request.confidence) + print("Server received mitigation values...", request.confidence, flush=True) + last_value = request.confidence last_tag = request.tag + + ip_o = request.ip_o + ip_d = request.ip_d + port_o = request.port_o + port_d = request.port_d + + service_id = self.GenerateServiceId(request.service_id) + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + service = GetService(service_id) + print(service) + #service.config_rules.append(config_rule) + #UpdateService(service) + # RETURN OK TO THE CALLER - return EmptyMitigator( + return Empty( message=f"OK, received values: {last_tag} with confidence {last_value}." ) + + def SetDevice(self, device): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetDevice(device) + + def SetLink(self, link): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetLink(link) + + def SetTopology(self, link): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetTopology(link) + + + def GetService(self, service_id): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.GetService(service_id) + + def SetContext(self, context): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetContext(context) + + def UpdateService(self, service): + with grpc.insecure_channel(SERVICE_CHANNEL) as channel: + stub = ServiceServiceStub(channel) + stub.UpdateService(service) + + def CreateService(self, service): + with grpc.insecure_channel(SERVICE_CHANNEL) as channel: + stub = ServiceServiceStub(channel) + stub.CreateService(service) def GetMitigation(self, request, context): # GET OR PERFORM MITIGATION STRATEGY logging.debug("") print("Returing mitigation strategy...") k = self.last_value * 2 - return EmptyMitigator( + return Empty( message=f"Mitigation with double confidence = {k}" ) - - diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py index ad05b0ee6..a84ac181e 100644 --- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py +++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py @@ -70,12 +70,15 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto "confidence": None, "timestamp": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "ip_o": request.ip_o, + "ip_d": request.ip_d, "tag_name": None, "tag": None, "flow_id": request.flow_id, "protocol": request.protocol, + "port_o": request.port_o, "port_d": request.port_d, "ml_id": "RandomForest", + "service_id": request.service_id, "time_start": request.time_start, "time_end": request.time_end, } @@ -93,7 +96,7 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto def SendInput(self, request, context): # PERFORM INFERENCE WITH SENT INPUTS logging.debug("") - print("Inferencing ...") + print("Inferencing ...", flush=True) # STORE VALUES self.inference_values.append(request) @@ -102,22 +105,27 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto output = self.make_inference(request) # SEND INFO TO MITIGATION SERVER + + try: - with grpc.insecure_channel("localhost:10002") as channel: - stub = L3AttackmitigatorStub(channel) - print("Sending to mitigator...") - response = stub.SendOutput(output) - print("Sent output to mitigator and received: ", response.message) + with grpc.insecure_channel("192.168.165.78:10002") as channel: + stub = L3AttackmitigatorStub(channel) + print("Sending to mitigator...") + response = stub.SendOutput(output) + #print("Response received", response, "Hola", flush=True) + #print("Sent output to mitigator and received: ", response.message) #FIX No message received # RETURN "OK" TO THE CALLER - return Empty( - message="OK, information received and mitigator notified" - ) - except: + return Empty( + message="OK, information received and mitigator notified" + ) + except Exception as e: + print("This is an exception", repr(e), flush=True) print('Couldnt find l3_attackmitigator') return Empty( message="Mitigator Not found" ) + def GetOutput(self, request, context): logging.debug("") -- GitLab From 5d232aa43e0f285cc9992b7d50a75509d13f0b95 Mon Sep 17 00:00:00 2001 From: luiscal4a Date: Tue, 27 Sep 2022 12:27:00 +0200 Subject: [PATCH 016/890] Added L3 security status KPIs monitoring --- expose_ingress_grpc.sh | 7 +- log_netstat.txt | 505 ++++++++++++++ my_deploy.sh | 2 +- ofc22 | 2 +- proto/l3_attackmitigator.proto | 7 +- proto/l3_centralizedattackdetector.proto | 41 +- scripts/scenario3/l3/README.md | 3 + ...unch_l3_attack_detection_and_mitigation.sh | 9 + ...ttack_detection_and_mitigation_complete.sh | 11 + src/l3_attackmitigator/Dockerfile | 1 + src/l3_attackmitigator/dump.txt | 184 +++++ .../l3_attackmitigatorServiceServicerImpl.py | 337 ++++----- .../service/test_create_service.py | 265 +++++++ ...alizedattackdetectorServiceServicerImpl.py | 99 ++- ...edattackdetectorServiceServicerImpl_old.py | 141 ++++ .../crypto_5g_rf_spider_features.onnx | Bin 0 -> 1304368 bytes .../crypto_5g_rf_teraflow_features.onnx | Bin 0 -> 9957075 bytes ...{teraflow_rf.onnx => teraflow_rf_OLD.onnx} | Bin src/tests/ofc22/descriptors_emulated.json | 32 +- src/tests/ofc22/tests/LoadDescriptors.py | 2 +- src/tests/ofc22/tests/Objects.py | 4 +- src/tests/ofc22/tests/common/Constants.py | 80 +++ src/tests/ofc22/tests/common/DeviceTypes.py | 26 + src/tests/ofc22/tests/common/Settings.py | 98 +++ src/tests/ofc22/tests/common/__init__.py | 14 + .../database/api/context/slice/SliceStatus.py | 31 + .../database/api/context/slice/__init__.py | 0 src/tests/ofc22/tests/common/logger.py | 44 ++ .../tests/common/message_broker/Constants.py | 15 + .../tests/common/message_broker/Factory.py | 46 ++ .../tests/common/message_broker/Message.py | 19 + .../common/message_broker/MessageBroker.py | 41 ++ .../tests/common/message_broker/__init__.py | 14 + .../message_broker/backend/BackendEnum.py | 22 + .../common/message_broker/backend/_Backend.py | 28 + .../common/message_broker/backend/__init__.py | 14 + .../backend/inmemory/InMemoryBackend.py | 55 ++ .../backend/inmemory/__init__.py | 14 + .../backend/redis/RedisBackend.py | 58 ++ .../message_broker/backend/redis/__init__.py | 14 + .../common/message_broker/tests/__init__.py | 14 + .../message_broker/tests/test_unitary.py | 167 +++++ src/tests/ofc22/tests/common/orm/Database.py | 52 ++ .../ofc22/tests/common/orm/Exceptions.py | 19 + src/tests/ofc22/tests/common/orm/Factory.py | 46 ++ src/tests/ofc22/tests/common/orm/HighLevel.py | 84 +++ src/tests/ofc22/tests/common/orm/__init__.py | 14 + .../tests/common/orm/backend/BackendEnum.py | 22 + .../ofc22/tests/common/orm/backend/Tools.py | 19 + .../tests/common/orm/backend/_Backend.py | 67 ++ .../tests/common/orm/backend/__init__.py | 14 + .../orm/backend/inmemory/InMemoryBackend.py | 161 +++++ .../common/orm/backend/inmemory/Tools.py | 45 ++ .../common/orm/backend/inmemory/__init__.py | 14 + .../tests/common/orm/backend/redis/Mutex.py | 136 ++++ .../common/orm/backend/redis/RedisBackend.py | 131 ++++ .../common/orm/backend/redis/__init__.py | 14 + .../tests/common/orm/fields/BooleanField.py | 31 + .../common/orm/fields/EnumeratedField.py | 38 + .../ofc22/tests/common/orm/fields/Field.py | 63 ++ .../tests/common/orm/fields/FloatField.py | 34 + .../common/orm/fields/ForeignKeyField.py | 34 + .../tests/common/orm/fields/IntegerField.py | 34 + .../common/orm/fields/PrimaryKeyField.py | 29 + .../tests/common/orm/fields/StringField.py | 39 ++ .../ofc22/tests/common/orm/fields/__init__.py | 22 + .../ofc22/tests/common/orm/model/Model.py | 308 ++++++++ .../ofc22/tests/common/orm/model/Tools.py | 31 + .../ofc22/tests/common/orm/model/__init__.py | 14 + .../ofc22/tests/common/orm/tests/__init__.py | 14 + .../tests/common/orm/tests/test_unitary.py | 656 ++++++++++++++++++ src/tests/ofc22/tests/common/proto | 1 + .../common/rpc_method_wrapper/Decorator.py | 82 +++ .../rpc_method_wrapper/ServiceExceptions.py | 58 ++ .../common/rpc_method_wrapper/__init__.py | 14 + .../rpc_method_wrapper/tests/__init__.py | 14 + .../rpc_method_wrapper/tests/test_unitary.py | 44 ++ .../ofc22/tests/common/tests/EventTools.py | 101 +++ .../common/tests/MockServicerImpl_Context.py | 279 ++++++++ .../common/tests/MockServicerImpl_Device.py | 51 ++ .../tests/MockServicerImpl_Monitoring.py | 34 + .../common/tests/MockServicerImpl_Service.py | 45 ++ .../common/tests/MockServicerImpl_Slice.py | 45 ++ .../tests/common/tests/PytestGenerateTests.py | 56 ++ .../ofc22/tests/common/tests/__init__.py | 14 + .../ofc22/tests/common/tools/__init__.py | 14 + .../common/tools/client/RetryDecorator.py | 91 +++ .../tests/common/tools/client/__init__.py | 14 + .../ofc22/tests/common/tools/grpc/Tools.py | 36 + .../ofc22/tests/common/tools/grpc/__init__.py | 14 + .../common/tools/object_factory/ConfigRule.py | 27 + .../common/tools/object_factory/Connection.py | 32 + .../common/tools/object_factory/Constraint.py | 20 + .../common/tools/object_factory/Context.py | 23 + .../common/tools/object_factory/Device.py | 119 ++++ .../common/tools/object_factory/EndPoint.py | 51 ++ .../tests/common/tools/object_factory/Link.py | 27 + .../common/tools/object_factory/Service.py | 53 ++ .../common/tools/object_factory/Topology.py | 28 + .../common/tools/object_factory/__init__.py | 14 + .../tools/service/GenericGrpcService.py | 71 ++ .../common/tools/service/GenericRestServer.py | 59 ++ .../tests/common/tools/service/__init__.py | 14 + .../tests/common/type_checkers/Assertions.py | 382 ++++++++++ .../tests/common/type_checkers/Checkers.py | 109 +++ .../tests/common/type_checkers/__init__.py | 14 + .../ofc22/tests/test_functional_bootstrap.py | 2 +- .../ofc22/tests/test_functional_cleanup.py | 2 +- .../tests/test_functional_create_service.py | 2 +- .../tests/test_functional_delete_service.py | 2 +- 110 files changed, 6420 insertions(+), 289 deletions(-) create mode 100644 log_netstat.txt create mode 100644 scripts/scenario3/l3/README.md create mode 100644 scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation.sh create mode 100644 scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation_complete.sh create mode 100644 src/l3_attackmitigator/dump.txt create mode 100644 src/l3_attackmitigator/service/test_create_service.py create mode 100644 src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl_old.py create mode 100644 src/l3_centralizedattackdetector/service/ml_model/crypto_5g_rf_spider_features.onnx create mode 100644 src/l3_centralizedattackdetector/service/ml_model/crypto_5g_rf_teraflow_features.onnx rename src/l3_centralizedattackdetector/service/ml_model/{teraflow_rf.onnx => teraflow_rf_OLD.onnx} (100%) create mode 100644 src/tests/ofc22/tests/common/Constants.py create mode 100644 src/tests/ofc22/tests/common/DeviceTypes.py create mode 100644 src/tests/ofc22/tests/common/Settings.py create mode 100644 src/tests/ofc22/tests/common/__init__.py create mode 100644 src/tests/ofc22/tests/common/database/api/context/slice/SliceStatus.py create mode 100644 src/tests/ofc22/tests/common/database/api/context/slice/__init__.py create mode 100644 src/tests/ofc22/tests/common/logger.py create mode 100644 src/tests/ofc22/tests/common/message_broker/Constants.py create mode 100644 src/tests/ofc22/tests/common/message_broker/Factory.py create mode 100644 src/tests/ofc22/tests/common/message_broker/Message.py create mode 100644 src/tests/ofc22/tests/common/message_broker/MessageBroker.py create mode 100644 src/tests/ofc22/tests/common/message_broker/__init__.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/BackendEnum.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/_Backend.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/__init__.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/inmemory/InMemoryBackend.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/inmemory/__init__.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/redis/RedisBackend.py create mode 100644 src/tests/ofc22/tests/common/message_broker/backend/redis/__init__.py create mode 100644 src/tests/ofc22/tests/common/message_broker/tests/__init__.py create mode 100644 src/tests/ofc22/tests/common/message_broker/tests/test_unitary.py create mode 100644 src/tests/ofc22/tests/common/orm/Database.py create mode 100644 src/tests/ofc22/tests/common/orm/Exceptions.py create mode 100644 src/tests/ofc22/tests/common/orm/Factory.py create mode 100644 src/tests/ofc22/tests/common/orm/HighLevel.py create mode 100644 src/tests/ofc22/tests/common/orm/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/BackendEnum.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/Tools.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/_Backend.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/inmemory/InMemoryBackend.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/inmemory/Tools.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/inmemory/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/redis/Mutex.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/redis/RedisBackend.py create mode 100644 src/tests/ofc22/tests/common/orm/backend/redis/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/BooleanField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/EnumeratedField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/Field.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/FloatField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/ForeignKeyField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/IntegerField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/PrimaryKeyField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/StringField.py create mode 100644 src/tests/ofc22/tests/common/orm/fields/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/model/Model.py create mode 100644 src/tests/ofc22/tests/common/orm/model/Tools.py create mode 100644 src/tests/ofc22/tests/common/orm/model/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/tests/__init__.py create mode 100644 src/tests/ofc22/tests/common/orm/tests/test_unitary.py create mode 120000 src/tests/ofc22/tests/common/proto create mode 100644 src/tests/ofc22/tests/common/rpc_method_wrapper/Decorator.py create mode 100644 src/tests/ofc22/tests/common/rpc_method_wrapper/ServiceExceptions.py create mode 100644 src/tests/ofc22/tests/common/rpc_method_wrapper/__init__.py create mode 100644 src/tests/ofc22/tests/common/rpc_method_wrapper/tests/__init__.py create mode 100644 src/tests/ofc22/tests/common/rpc_method_wrapper/tests/test_unitary.py create mode 100644 src/tests/ofc22/tests/common/tests/EventTools.py create mode 100644 src/tests/ofc22/tests/common/tests/MockServicerImpl_Context.py create mode 100644 src/tests/ofc22/tests/common/tests/MockServicerImpl_Device.py create mode 100644 src/tests/ofc22/tests/common/tests/MockServicerImpl_Monitoring.py create mode 100644 src/tests/ofc22/tests/common/tests/MockServicerImpl_Service.py create mode 100644 src/tests/ofc22/tests/common/tests/MockServicerImpl_Slice.py create mode 100644 src/tests/ofc22/tests/common/tests/PytestGenerateTests.py create mode 100644 src/tests/ofc22/tests/common/tests/__init__.py create mode 100644 src/tests/ofc22/tests/common/tools/__init__.py create mode 100644 src/tests/ofc22/tests/common/tools/client/RetryDecorator.py create mode 100644 src/tests/ofc22/tests/common/tools/client/__init__.py create mode 100644 src/tests/ofc22/tests/common/tools/grpc/Tools.py create mode 100644 src/tests/ofc22/tests/common/tools/grpc/__init__.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/ConfigRule.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Connection.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Constraint.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Context.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Device.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/EndPoint.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Link.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Service.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/Topology.py create mode 100644 src/tests/ofc22/tests/common/tools/object_factory/__init__.py create mode 100644 src/tests/ofc22/tests/common/tools/service/GenericGrpcService.py create mode 100644 src/tests/ofc22/tests/common/tools/service/GenericRestServer.py create mode 100644 src/tests/ofc22/tests/common/tools/service/__init__.py create mode 100644 src/tests/ofc22/tests/common/type_checkers/Assertions.py create mode 100644 src/tests/ofc22/tests/common/type_checkers/Checkers.py create mode 100644 src/tests/ofc22/tests/common/type_checkers/__init__.py diff --git a/expose_ingress_grpc.sh b/expose_ingress_grpc.sh index 37d72aa8d..b456dfd65 100755 --- a/expose_ingress_grpc.sh +++ b/expose_ingress_grpc.sh @@ -18,10 +18,10 @@ ######################################################################################################################## # If not already set, set the name of the Kubernetes namespace to deploy to. -export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"} +export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"} # If not already set, set the list of components you want to build images for, and deploy. -export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device automation policy service compute monitoring dbscanserving opticalattackmitigator opticalcentralizedattackdetector webui"} +export TFS_COMPONENTS=${TFS_COMPONENTS:-"l3_attackmitigator l3_centralizedattackdetector"} ######################################################################################################################## # Automated steps start here @@ -37,7 +37,8 @@ for COMPONENT in $TFS_COMPONENTS; do continue; fi - PATCH='{"data": {"'${SERVICE_GRPC_PORT}'": "'$TFS_K8S_NAMESPACE'/'${COMPONENT}service':'${SERVICE_GRPC_PORT}'"}}' + COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/") + PATCH='{"data": {"'${SERVICE_GRPC_PORT}'": "'$TFS_K8S_NAMESPACE'/'${COMPONENT_OBJNAME}service':'${SERVICE_GRPC_PORT}'"}}' #echo "PATCH: ${PATCH}" kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}" diff --git a/log_netstat.txt b/log_netstat.txt new file mode 100644 index 000000000..119a594ca --- /dev/null +++ b/log_netstat.txt @@ -0,0 +1,505 @@ +Active Internet connections (servers and established) +Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name +tcp 0 0 127.0.0.1:10256 0.0.0.0:* LISTEN 153218/kubelite +tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 678/systemd-resolve +tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 993/sshd: /usr/sbin +tcp 0 0 127.0.0.1:19001 0.0.0.0:* LISTEN 153813/k8s-dqlite +tcp 0 0 127.0.0.1:42265 0.0.0.0:* LISTEN 849/containerd +tcp 0 0 127.0.0.1:1338 0.0.0.0:* LISTEN 153238/containerd +tcp 0 0 127.0.0.1:40101 0.0.0.0:* LISTEN 153238/containerd +tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 153218/kubelite +tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 153218/kubelite +tcp 0 0 127.0.0.1:9099 0.0.0.0:* LISTEN 158723/calico-node +tcp 0 0 192.168.165.78:51518 10.1.49.5:8080 TIME_WAIT - +tcp 0 0 127.0.0.1:43812 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 192.168.165.78:36372 10.1.49.5:8181 TIME_WAIT - +tcp 0 0 127.0.0.1:43654 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:44512 127.0.0.1:19001 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 192.168.165.78:51790 10.1.49.5:8080 TIME_WAIT - +tcp 0 0 127.0.0.1:54044 127.0.0.1:16443 ESTABLISHED 2021571/kubectl +tcp 0 0 192.168.165.78:36296 10.1.49.27:10254 TIME_WAIT - +tcp 0 0 192.168.165.78:22 192.168.159.218:34102 ESTABLISHED 1657076/sshd: ubunt +tcp 0 0 127.0.0.1:43816 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 192.168.165.78:36404 10.1.49.27:10254 TIME_WAIT - +tcp 0 0 127.0.0.1:19001 127.0.0.1:44358 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 127.0.0.1:43874 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:43710 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:43764 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:60624 127.0.0.1:16443 ESTABLISHED 153218/kubelite +tcp 0 0 127.0.0.1:43760 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:43706 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:44602 127.0.0.1:19001 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 127.0.0.1:43598 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 192.168.165.78:36288 10.152.183.1:443 ESTABLISHED 158724/calico-node +tcp 0 0 127.0.0.1:43650 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 127.0.0.1:44358 127.0.0.1:19001 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 127.0.0.1:19001 127.0.0.1:44512 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 192.168.165.78:22 192.168.159.138:54058 ESTABLISHED 1747499/sshd: ubunt +tcp 0 0 192.168.165.78:36294 10.152.183.1:443 ESTABLISHED 158725/calico-node +tcp 0 0 127.0.0.1:19001 127.0.0.1:44602 ESTABLISHED 153813/k8s-dqlite +tcp 0 0 192.168.165.78:22 192.168.159.138:44376 ESTABLISHED 1708137/sshd: ubunt +tcp 0 0 127.0.0.1:60498 127.0.0.1:16443 ESTABLISHED 153218/kubelite +tcp 0 0 127.0.0.1:43870 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 192.168.165.78:51732 10.1.49.5:8080 TIME_WAIT - +tcp 0 0 192.168.165.78:36320 10.1.49.5:8181 TIME_WAIT - +tcp 0 0 192.168.165.78:22 192.168.159.218:34080 ESTABLISHED 1656657/sshd: ubunt +tcp 0 0 192.168.165.78:22 192.168.159.218:34066 ESTABLISHED 1656216/sshd: ubunt +tcp 0 0 127.0.0.1:43602 127.0.0.1:9099 TIME_WAIT - +tcp 0 0 192.168.165.78:42658 192.168.165.73:22 ESTABLISHED 2004106/ssh +tcp 0 0 192.168.165.78:36286 10.152.183.1:443 ESTABLISHED 158723/calico-node +tcp6 0 0 :::10257 :::* LISTEN 153218/kubelite +tcp6 0 0 :::10259 :::* LISTEN 153218/kubelite +tcp6 0 0 :::22 :::* LISTEN 993/sshd: /usr/sbin +tcp6 0 0 :::16443 :::* LISTEN 153218/kubelite +tcp6 0 0 :::25000 :::* LISTEN 153442/cluster-agen +tcp6 0 0 :::10250 :::* LISTEN 153218/kubelite +tcp6 0 0 127.0.0.1:16443 127.0.0.1:60498 ESTABLISHED 153218/kubelite +tcp6 0 0 ::1:33470 ::1:16443 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 10.1.49.4:55496 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 192.168.165.78:15945 ESTABLISHED 153218/kubelite +tcp6 0 0 127.0.0.1:16443 127.0.0.1:54044 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 10.1.49.27:41900 ESTABLISHED 153218/kubelite +tcp6 0 0 127.0.0.1:16443 127.0.0.1:60624 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 10.1.49.36:36644 ESTABLISHED 153218/kubelite +tcp6 0 0 ::1:16443 ::1:33470 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 192.168.165.78:2426 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 192.168.165.78:44930 ESTABLISHED 153218/kubelite +tcp6 0 0 192.168.165.78:16443 10.1.49.5:44498 ESTABLISHED 153218/kubelite +udp 0 0 127.0.0.53:53 0.0.0.0:* 678/systemd-resolve +udp 0 0 192.168.165.78:68 0.0.0.0:* 676/systemd-network +udp 0 0 0.0.0.0:4789 0.0.0.0:* - +raw6 0 0 :::58 :::* 7 676/systemd-network +Active UNIX domain sockets (servers and established) +Proto RefCnt Flags Type State I-Node PID/Program name Path +unix 2 [ ACC ] SEQPACKET LISTENING 16349 1/init /run/udev/control +unix 2 [ ] DGRAM 75891028 1656328/systemd /run/user/1000/systemd/notify +unix 2 [ ACC ] STREAM LISTENING 75891031 1656328/systemd /run/user/1000/systemd/private +unix 2 [ ACC ] STREAM LISTENING 75891036 1656328/systemd /run/user/1000/bus +unix 2 [ ACC ] STREAM LISTENING 10818763 153238/containerd /var/snap/microk8s/common/run/containerd.sock +unix 2 [ ACC ] STREAM LISTENING 76734713 1993846/containerd- /run/containerd/s/7fd73cf0ff99008a70760efe5bcb1dd044abc113df1dc6cf083bf7e1002751ac +unix 2 [ ACC ] STREAM LISTENING 75891037 1656328/systemd /run/user/1000/gnupg/S.dirmngr +unix 2 [ ACC ] STREAM LISTENING 75891038 1656328/systemd /run/user/1000/gnupg/S.gpg-agent.browser +unix 2 [ ACC ] STREAM LISTENING 75891039 1656328/systemd /run/user/1000/gnupg/S.gpg-agent.extra +unix 2 [ ACC ] STREAM LISTENING 16333 1/init @/org/kernel/linux/storage/multipathd +unix 2 [ ACC ] STREAM LISTENING 75891040 1656328/systemd /run/user/1000/gnupg/S.gpg-agent.ssh +unix 2 [ ACC ] STREAM LISTENING 75891041 1656328/systemd /run/user/1000/gnupg/S.gpg-agent +unix 2 [ ACC ] STREAM LISTENING 75891042 1656328/systemd /run/user/1000/pk-debconf-socket +unix 2 [ ACC ] STREAM LISTENING 75891044 1656328/systemd /run/user/1000/snapd-session-agent.socket +unix 3 [ ] DGRAM 16317 1/init /run/systemd/notify +unix 2 [ ACC ] STREAM LISTENING 16320 1/init /run/systemd/private +unix 2 [ ACC ] STREAM LISTENING 76763893 2000428/containerd- /run/containerd/s/74902a72b569db045be2ae56eb637a03613f227b3686598a3dcc596de650dff1 +unix 2 [ ACC ] STREAM LISTENING 16322 1/init /run/systemd/userdb/io.systemd.DynamicUser +unix 2 [ ACC ] STREAM LISTENING 21889 1/init /var/snap/lxd/common/lxd/unix.socket +unix 2 [ ACC ] STREAM LISTENING 16331 1/init /run/lvm/lvmpolld.socket +unix 2 [ ] DGRAM 16334 1/init /run/systemd/journal/syslog +unix 2 [ ACC ] STREAM LISTENING 10818443 153813/k8s-dqlite @snap.microk8s.dqlite-3297041220608546238 +unix 14 [ ] DGRAM 16342 1/init /run/systemd/journal/dev-log +unix 2 [ ACC ] STREAM LISTENING 16344 1/init /run/systemd/journal/stdout +unix 10 [ ] DGRAM 16346 1/init /run/systemd/journal/socket +unix 2 [ ACC ] STREAM LISTENING 76741211 1995377/containerd- /run/containerd/s/2f02eff4c6dfd9a149a897f90617eb9847bc560df5e6945364ef7ae1b4e65b58 +unix 2 [ ACC ] STREAM LISTENING 16361 373/systemd-journal /run/systemd/journal/io.systemd.journal +unix 2 [ ACC ] STREAM LISTENING 21884 1/init /run/dbus/system_bus_socket +unix 2 [ ACC ] STREAM LISTENING 29172 1291/dockerd /var/run/docker/metrics.sock +unix 2 [ ACC ] STREAM LISTENING 21886 1/init /run/docker.sock +unix 2 [ ACC ] STREAM LISTENING 10823698 153218/kubelite /var/snap/microk8s/common/var/lib/kubelet/pod-resources/4170367821 +unix 2 [ ACC ] STREAM LISTENING 21891 1/init /run/snapd.socket +unix 2 [ ACC ] STREAM LISTENING 21893 1/init /run/snapd-snap.socket +unix 2 [ ACC ] STREAM LISTENING 21895 1/init /run/uuidd/request +unix 2 [ ACC ] STREAM LISTENING 76727527 1992258/containerd- /run/containerd/s/26f7fcfee36414966033abad0d9c862620ad0ecebd9dcb38b9fc9b8af241cd67 +unix 2 [ ] DGRAM 10820154 153218/kubelite @04bf3 +unix 2 [ ] DGRAM 10818438 153813/k8s-dqlite @04bf4 +unix 2 [ ACC ] STREAM LISTENING 24093 727/irqbalance /run/irqbalance//irqbalance727.sock +unix 2 [ ACC ] STREAM LISTENING 10834752 157875/containerd-s /run/containerd/s/9a30df63191c3fdc41a06352a43552ce058b824674d9732b0c3f263cd1d00b3c +unix 2 [ ACC ] STREAM LISTENING 45701 7199/containerd-shi /run/containerd/s/97b2e2570eade66d010987545f35052305ff73dfdab784518d6cc8b1b628d012 +unix 2 [ ACC ] STREAM LISTENING 10822626 153218/kubelite /var/lib/kubelet/device-plugins/kubelet.sock +unix 2 [ ACC ] STREAM LISTENING 27619 1291/dockerd /var/run/docker/libnetwork/5c623704ae16.sock +unix 2 [ ACC ] STREAM LISTENING 10818468 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 10840243 158726/calico-node @04c11 +unix 2 [ ] DGRAM 10839674 158724/calico-node @04c12 +unix 2 [ ] DGRAM 10840244 158723/calico-node @04c13 +unix 2 [ ] DGRAM 10842158 158725/calico-node @04c14 +unix 2 [ ] DGRAM 10841427 158722/calico-node @04c10 +unix 2 [ ACC ] STREAM LISTENING 27767 849/containerd /run/containerd/containerd.sock.ttrpc +unix 2 [ ACC ] STREAM LISTENING 27769 849/containerd /run/containerd/containerd.sock +unix 2 [ ACC ] STREAM LISTENING 10842891 159430/containerd-s /run/containerd/s/f8abee19ee2ab88a6078d5d5bdf925d9807a8fe96705ca1a68504ad5983cfb0f +unix 2 [ ACC ] STREAM LISTENING 10818762 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 2 [ ACC ] STREAM LISTENING 21888 1/init @ISCSIADM_ABSTRACT_NAMESPACE +unix 2 [ ACC ] STREAM LISTENING 45765 7243/containerd-shi /run/containerd/s/49d0f35fada5a7773a8c988323a9a644d34169bf777bba772679ac9060ba36cb +unix 2 [ ACC ] STREAM LISTENING 70794128 3724693/containerd- /run/containerd/s/118ffd607cfb90cfac4a1da3cf88604281157c82ffe97e058a1ec3db1f60f17a +unix 2 [ ACC ] STREAM LISTENING 61694265 43569/containerd-sh /run/containerd/s/89a24c1ddc03373c709cb7773fec3778d644907bf173a78b074cc5072559ce55 +unix 2 [ ] DGRAM 30180 1291/dockerd @00015 +unix 3 [ ] STREAM CONNECTED 75890991 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10834612 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820410 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821930 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10816522 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10820392 153218/kubelite +unix 3 [ ] DGRAM 20230 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10836591 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822679 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820352 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821425 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 19020 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10834613 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10822690 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818504 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820388 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25306 720/dbus-daemon +unix 3 [ ] STREAM CONNECTED 10820543 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822677 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76762052 2000428/containerd- /run/containerd/s/74902a72b569db045be2ae56eb637a03613f227b3686598a3dcc596de650dff1 +unix 3 [ ] STREAM CONNECTED 10820359 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821427 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 17822 557/multipathd +unix 3 [ ] DGRAM 20232 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10820420 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822688 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820354 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820393 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 26225 733/rsyslogd +unix 3 [ ] STREAM CONNECTED 25307 720/dbus-daemon +unix 3 [ ] STREAM CONNECTED 10822702 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820412 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25420 991/ModemManager +unix 3 [ ] STREAM CONNECTED 10818510 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 27658 847/udisksd +unix 3 [ ] STREAM CONNECTED 10821429 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 25315 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 20315 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10820423 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822686 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76763033 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 10820356 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10822671 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 26417 982/python3 +unix 3 [ ] STREAM CONNECTED 10836571 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820422 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76741254 1995377/containerd- /run/containerd/s/2f02eff4c6dfd9a149a897f90617eb9847bc560df5e6945364ef7ae1b4e65b58 +unix 3 [ ] STREAM CONNECTED 10820351 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820408 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820415 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820414 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76733066 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820360 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10822659 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] DGRAM 20231 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10822829 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820411 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76733788 1993846/containerd- /run/containerd/s/7fd73cf0ff99008a70760efe5bcb1dd044abc113df1dc6cf083bf7e1002751ac +unix 3 [ ] STREAM CONNECTED 10818512 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820391 153218/kubelite +unix 3 [ ] STREAM CONNECTED 26713 847/udisksd +unix 3 [ ] STREAM CONNECTED 26418 982/python3 +unix 3 [ ] STREAM CONNECTED 25308 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 10822830 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822681 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76742131 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820357 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10822661 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 75891737 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10822832 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820409 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818514 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820389 153218/kubelite +unix 3 [ ] STREAM CONNECTED 26216 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10822695 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820413 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818521 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10816723 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10820405 153218/kubelite +unix 3 [ ] STREAM CONNECTED 23728 1/init /run/systemd/journal/stdout +unix 3 [ ] DGRAM 20233 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10834611 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820418 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76762050 153238/containerd +unix 3 [ ] STREAM CONNECTED 10816722 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820385 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 25305 720/dbus-daemon +unix 3 [ ] STREAM CONNECTED 23580 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10822699 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820417 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76762062 2000428/containerd- +unix 3 [ ] STREAM CONNECTED 10818508 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820387 153218/kubelite +unix 3 [ ] STREAM CONNECTED 28901 808/snapd +unix 2 [ ] DGRAM 20226 676/systemd-network +unix 3 [ ] STREAM CONNECTED 10822700 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10822692 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10819761 153813/k8s-dqlite +unix 3 [ ] STREAM CONNECTED 10820355 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820390 153218/kubelite +unix 3 [ ] STREAM CONNECTED 28902 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 76764788 2000428/containerd- /run/containerd/s/74902a72b569db045be2ae56eb637a03613f227b3686598a3dcc596de650dff1 +unix 3 [ ] STREAM CONNECTED 10822036 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 75904544 1661884/dbus-daemon +unix 3 [ ] STREAM CONNECTED 75889919 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 10834793 157875/containerd-s +unix 3 [ ] STREAM CONNECTED 10822676 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818704 153238/containerd +unix 3 [ ] STREAM CONNECTED 76727805 153238/containerd +unix 3 [ ] STREAM CONNECTED 75891193 1656494/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 23447 808/snapd +unix 3 [ ] STREAM CONNECTED 20334 1/init +unix 3 [ ] STREAM CONNECTED 10834760 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820399 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 25545 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 76725164 1992258/containerd- /run/containerd/s/26f7fcfee36414966033abad0d9c862620ad0ecebd9dcb38b9fc9b8af241cd67 +unix 3 [ ] DGRAM 16318 1/init +unix 3 [ ] STREAM CONNECTED 10822666 153218/kubelite +unix 3 [ ] STREAM CONNECTED 29173 1291/dockerd +unix 2 [ ] STREAM CONNECTED 75892187 1656657/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 70794183 153238/containerd +unix 3 [ ] STREAM CONNECTED 10818555 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 16992 404/systemd-udevd +unix 3 [ ] STREAM CONNECTED 10837703 157875/containerd-s /run/containerd/s/9a30df63191c3fdc41a06352a43552ce058b824674d9732b0c3f263cd1d00b3c +unix 3 [ ] STREAM CONNECTED 10822667 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 61692764 43569/containerd-sh /run/containerd/s/89a24c1ddc03373c709cb7773fec3778d644907bf173a78b074cc5072559ce55 +unix 3 [ ] STREAM CONNECTED 10834614 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 26596 1291/dockerd +unix 3 [ ] STREAM CONNECTED 10821943 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820406 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76727531 153238/containerd +unix 2 [ ] DGRAM 75892224 1656657/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10822707 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 75904543 1661884/dbus-daemon +unix 2 [ ] DGRAM 75891006 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10834794 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 10820401 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 30206 849/containerd /run/containerd/containerd.sock +unix 3 [ ] STREAM CONNECTED 76733819 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 22844 715/accounts-daemon +unix 3 [ ] STREAM CONNECTED 76740292 1995377/containerd- /run/containerd/s/2f02eff4c6dfd9a149a897f90617eb9847bc560df5e6945364ef7ae1b4e65b58 +unix 3 [ ] STREAM CONNECTED 10822028 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818953 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 24829 847/udisksd +unix 3 [ ] STREAM CONNECTED 10822684 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10816097 7243/containerd-shi /run/containerd/s/49d0f35fada5a7773a8c988323a9a644d34169bf777bba772679ac9060ba36cb +unix 2 [ ] DGRAM 76828033 2024548/sudo +unix 3 [ ] STREAM CONNECTED 10834632 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25641 844/systemd-logind +unix 3 [ ] STREAM CONNECTED 76125569 1747580/sshd: ubunt +unix 3 [ ] DGRAM 16994 404/systemd-udevd +unix 3 [ ] STREAM CONNECTED 75891032 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10824613 7199/containerd-shi /run/containerd/s/97b2e2570eade66d010987545f35052305ff73dfdab784518d6cc8b1b628d012 +unix 3 [ ] STREAM CONNECTED 10822694 153218/kubelite +unix 3 [ ] STREAM CONNECTED 70794846 3724693/containerd- /run/containerd/s/118ffd607cfb90cfac4a1da3cf88604281157c82ffe97e058a1ec3db1f60f17a +unix 3 [ ] STREAM CONNECTED 10822035 153218/kubelite +unix 3 [ ] STREAM CONNECTED 20224 676/systemd-network +unix 2 [ ] DGRAM 75891000 1656336/(sd-pam) +unix 3 [ ] STREAM CONNECTED 10842901 159430/containerd-s /run/containerd/s/f8abee19ee2ab88a6078d5d5bdf925d9807a8fe96705ca1a68504ad5983cfb0f +unix 3 [ ] STREAM CONNECTED 10820403 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 76727559 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 76125570 1747499/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10821932 153218/kubelite +unix 2 [ ] DGRAM 75904542 1661884/dbus-daemon +unix 3 [ ] DGRAM 75891029 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10822673 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25544 729/python3 +unix 3 [ ] STREAM CONNECTED 28750 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 75891194 1656216/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10822053 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10816263 153834/bash +unix 3 [ ] STREAM CONNECTED 24094 715/accounts-daemon +unix 3 [ ] STREAM CONNECTED 10823666 153238/containerd +unix 3 [ ] STREAM CONNECTED 10822674 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 30181 1291/dockerd +unix 3 [ ] STREAM CONNECTED 70794135 153238/containerd +unix 3 [ ] STREAM CONNECTED 10821596 153238/containerd /var/snap/microk8s/common/run/containerd.sock +unix 3 [ ] DGRAM 16319 1/init +unix 3 [ ] STREAM CONNECTED 10822669 153218/kubelite +unix 3 [ ] STREAM CONNECTED 30205 1291/dockerd +unix 3 [ ] STREAM CONNECTED 76733818 1993846/containerd- +unix 3 [ ] STREAM CONNECTED 76742798 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820538 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 19793 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 10822683 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76727558 1992258/containerd- +unix 3 [ ] STREAM CONNECTED 10834633 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 26215 982/python3 +unix 3 [ ] STREAM CONNECTED 25312 720/dbus-daemon /run/dbus/system_bus_socket +unix 2 [ ] STREAM CONNECTED 76124109 1747499/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10843795 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820397 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 28093 849/containerd /run/containerd/containerd.sock +unix 3 [ ] STREAM CONNECTED 76726215 1992258/containerd- /run/containerd/s/26f7fcfee36414966033abad0d9c862620ad0ecebd9dcb38b9fc9b8af241cd67 +unix 3 [ ] STREAM CONNECTED 10815296 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76766488 153238/containerd +unix 3 [ ] STREAM CONNECTED 18549 1/init /run/systemd/journal/stdout +unix 3 [ ] DGRAM 75891030 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10822665 153218/kubelite +unix 3 [ ] STREAM CONNECTED 22925 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 70794862 3724693/containerd- /run/containerd/s/118ffd607cfb90cfac4a1da3cf88604281157c82ffe97e058a1ec3db1f60f17a +unix 3 [ ] STREAM CONNECTED 25311 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] DGRAM 16995 404/systemd-udevd +unix 3 [ ] STREAM CONNECTED 10822670 153218/kubelite +unix 3 [ ] STREAM CONNECTED 61692763 153238/containerd +unix 3 [ ] STREAM CONNECTED 22134 729/python3 +unix 3 [ ] STREAM CONNECTED 61695831 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820527 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818531 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 25642 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 23654 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 75904546 1661884/dbus-daemon /run/user/1000/bus +unix 3 [ ] STREAM CONNECTED 10822703 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820367 153218/kubelite +unix 3 [ ] STREAM CONNECTED 70794854 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 10820425 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818541 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 21964 719/cron +unix 2 [ ] DGRAM 16363 373/systemd-journal +unix 3 [ ] STREAM CONNECTED 10822825 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820368 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821947 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820364 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818748 153238/containerd +unix 3 [ ] STREAM CONNECTED 75892273 1656657/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 26335 991/ModemManager +unix 3 [ ] STREAM CONNECTED 10820530 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820361 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821514 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820365 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25523 993/sshd: /usr/sbin +unix 3 [ ] STREAM CONNECTED 26781 982/python3 +unix 3 [ ] STREAM CONNECTED 23726 678/systemd-resolve +unix 3 [ ] STREAM CONNECTED 10820529 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818535 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 70795893 3724693/containerd- +unix 3 [ ] STREAM CONNECTED 22924 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 75892272 1656745/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 27718 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 10822697 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820362 153218/kubelite +unix 3 [ ] STREAM CONNECTED 26267 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 25310 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 10820534 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818529 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 25863 844/systemd-logind +unix 3 [ ] STREAM CONNECTED 76740307 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 10820526 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820363 153218/kubelite +unix 3 [ ] STREAM CONNECTED 26312 729/python3 +unix 3 [ ] STREAM CONNECTED 76727565 1992258/containerd- /run/containerd/s/26f7fcfee36414966033abad0d9c862620ad0ecebd9dcb38b9fc9b8af241cd67 +unix 3 [ ] STREAM CONNECTED 10820533 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818523 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 26313 729/python3 +unix 3 [ ] STREAM CONNECTED 25551 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 61696138 43569/containerd-sh /run/containerd/s/89a24c1ddc03373c709cb7773fec3778d644907bf173a78b074cc5072559ce55 +unix 3 [ ] STREAM CONNECTED 10820429 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818533 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10819669 7199/containerd-shi /run/containerd/s/97b2e2570eade66d010987545f35052305ff73dfdab784518d6cc8b1b628d012 +unix 2 [ ] DGRAM 25854 844/systemd-logind +unix 3 [ ] STREAM CONNECTED 23449 1/init /run/systemd/journal/stdout +unix 2 [ ] DGRAM 23666 678/systemd-resolve +unix 3 [ ] STREAM CONNECTED 76741228 1995377/containerd- +unix 3 [ ] STREAM CONNECTED 10822705 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820366 153218/kubelite +unix 3 [ ] STREAM CONNECTED 25314 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 76726081 153238/containerd +unix 3 [ ] STREAM CONNECTED 75905108 1656328/systemd +unix 3 [ ] STREAM CONNECTED 10820426 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818537 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10821516 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818527 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820531 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10821433 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 26672 849/containerd +unix 3 [ ] STREAM CONNECTED 20411 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 25313 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] DGRAM 19140 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 10821566 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820375 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 76034092 1708137/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10821568 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10822657 153218/kubelite +unix 3 [ ] STREAM CONNECTED 61696211 43569/containerd-sh +unix 3 [ ] STREAM CONNECTED 10845407 159430/containerd-s +unix 3 [ ] STREAM CONNECTED 22705 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 76821069 153813/k8s-dqlite @snap.microk8s.dqlite-3297041220608546238 +unix 3 [ ] STREAM CONNECTED 10820370 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821569 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818557 153218/kubelite +unix 3 [ ] STREAM CONNECTED 19132 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10818547 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818560 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821422 153218/kubelite +unix 3 [ ] STREAM CONNECTED 75893794 1657352/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 76826078 153813/k8s-dqlite @snap.microk8s.dqlite-3297041220608546238 +unix 3 [ ] STREAM CONNECTED 10820371 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821617 153238/containerd /var/snap/microk8s/common/run/containerd.sock +unix 3 [ ] STREAM CONNECTED 10816531 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 26680 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10818758 153238/containerd +unix 3 [ ] STREAM CONNECTED 10820379 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818860 1/init /run/systemd/journal/stdout +unix 2 [ ] DGRAM 16837 1/init +unix 2 [ ] DGRAM 76125402 1747499/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10838275 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10820395 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10845417 153238/containerd +unix 3 [ ] STREAM CONNECTED 10818042 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 76034810 1708137/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 23212 732/polkitd +unix 3 [ ] DGRAM 19138 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 10820372 153218/kubelite +unix 3 [ ] STREAM CONNECTED 16983 404/systemd-udevd +unix 2 [ ] DGRAM 75893200 1657076/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10822663 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10816148 7243/containerd-shi /run/containerd/s/49d0f35fada5a7773a8c988323a9a644d34169bf777bba772679ac9060ba36cb +unix 3 [ ] DGRAM 19137 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 76827723 153813/k8s-dqlite +unix 3 [ ] STREAM CONNECTED 10820384 153218/kubelite +unix 3 [ ] STREAM CONNECTED 24081 727/irqbalance +unix 3 [ ] STREAM CONNECTED 10821565 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821423 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 61694305 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 2 [ ] DGRAM 25550 991/ModemManager +unix 3 [ ] STREAM CONNECTED 25309 720/dbus-daemon /run/dbus/system_bus_socket +unix 3 [ ] STREAM CONNECTED 10821420 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] STREAM CONNECTED 76030946 1708137/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10821586 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820377 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10841097 157875/containerd-s /run/containerd/s/9a30df63191c3fdc41a06352a43552ce058b824674d9732b0c3f263cd1d00b3c +unix 3 [ ] STREAM CONNECTED 26264 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 10820373 153218/kubelite +unix 2 [ ] STREAM CONNECTED 75889329 1656216/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10821435 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10843825 159430/containerd-s /run/containerd/s/f8abee19ee2ab88a6078d5d5bdf925d9807a8fe96705ca1a68504ad5983cfb0f +unix 3 [ ] STREAM CONNECTED 76823736 153813/k8s-dqlite +unix 3 [ ] STREAM CONNECTED 10820536 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10818553 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 23935 720/dbus-daemon +unix 3 [ ] STREAM CONNECTED 10822658 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10845408 153238/containerd /var/snap/microk8s/common/run/containerd.sock.ttrpc +unix 3 [ ] STREAM CONNECTED 10820535 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820374 153218/kubelite +unix 3 [ ] STREAM CONNECTED 23936 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 23652 678/systemd-resolve +unix 2 [ ] DGRAM 75889396 1656216/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10821431 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 23868 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 75902701 1/init /run/systemd/journal/stdout +unix 3 [ ] STREAM CONNECTED 75893795 1657076/sshd: ubunt +unix 2 [ ] DGRAM 19135 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 10818549 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10821587 153238/containerd /var/snap/microk8s/common/run/containerd.sock +unix 3 [ ] STREAM CONNECTED 10822664 153218/kubelite +unix 3 [ ] STREAM CONNECTED 76824368 153813/k8s-dqlite +unix 3 [ ] STREAM CONNECTED 10820380 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10814222 153214/bash +unix 3 [ ] STREAM CONNECTED 10818559 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818543 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 3 [ ] STREAM CONNECTED 10841096 153238/containerd +unix 3 [ ] STREAM CONNECTED 76824370 153813/k8s-dqlite @snap.microk8s.dqlite-3297041220608546238 +unix 3 [ ] STREAM CONNECTED 10820369 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10821616 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10820382 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] DGRAM 22062 719/cron +unix 3 [ ] STREAM CONNECTED 76034809 1708269/sshd: ubunt +unix 3 [ ] DGRAM 19139 591/systemd-timesyn +unix 3 [ ] STREAM CONNECTED 10818545 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 +unix 2 [ ] STREAM CONNECTED 75893110 1657076/sshd: ubunt +unix 3 [ ] STREAM CONNECTED 10838274 153218/kubelite +unix 3 [ ] STREAM CONNECTED 10818558 153218/kubelite +unix 3 [ ] STREAM CONNECTED 75903585 1661884/dbus-daemon +unix 3 [ ] STREAM CONNECTED 10816359 7199/containerd-shi +unix 3 [ ] STREAM CONNECTED 10818551 153813/k8s-dqlite /var/snap/microk8s/3597/var/kubernetes/backend/kine.sock:12379 diff --git a/my_deploy.sh b/my_deploy.sh index 28148123d..d8cc597ab 100644 --- a/my_deploy.sh +++ b/my_deploy.sh @@ -1,5 +1,5 @@ export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/" -export TFS_COMPONENTS="context device automation service compute monitoring webui" +export TFS_COMPONENTS="context device service compute l3_attackmitigator l3_centralizedattackdetector" export TFS_IMAGE_TAG="dev" export TFS_K8S_NAMESPACE="tfs" export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml" diff --git a/ofc22 b/ofc22 index 1102ec2a6..a0c40e716 120000 --- a/ofc22 +++ b/ofc22 @@ -1 +1 @@ -src/tests/ofc22/ \ No newline at end of file +src/tests/ofc22 \ No newline at end of file diff --git a/proto/l3_attackmitigator.proto b/proto/l3_attackmitigator.proto index 532f2b6fd..8f1a947dd 100644 --- a/proto/l3_attackmitigator.proto +++ b/proto/l3_attackmitigator.proto @@ -36,7 +36,8 @@ message L3AttackmitigatorOutput { string port_o = 9; string port_d = 10; string ml_id = 11; - string service_id = 12; - float time_start = 13; - float time_end = 14; + context.ServiceId service_id = 12; + context.EndPointId endpoint_id = 13; + float time_start = 14; + float time_end = 15; } diff --git a/proto/l3_centralizedattackdetector.proto b/proto/l3_centralizedattackdetector.proto index e3358dcd7..e251e6feb 100644 --- a/proto/l3_centralizedattackdetector.proto +++ b/proto/l3_centralizedattackdetector.proto @@ -14,6 +14,8 @@ syntax = "proto3"; +import "context.proto"; + service L3Centralizedattackdetector { // Sends a greeting rpc SendInput (L3CentralizedattackdetectorMetrics) returns (Empty) {} @@ -27,26 +29,29 @@ message L3CentralizedattackdetectorMetrics { There are currently 9 values and */ - // Machine learning - float n_packets_server_seconds = 1; - float n_packets_client_seconds = 2; - float n_bits_server_seconds = 3; - float n_bits_client_seconds = 4; - float n_bits_server_n_packets_server = 5; - float n_bits_client_n_packets_client = 6; - float n_packets_server_n_packets_client = 7; - float n_bits_server_n_bits_client = 8; + // Machine learning model features + float c_pkts_all = 1; + float c_ack_cnt = 2; + float c_bytes_uniq = 3; + float c_pkts_data = 4; + float c_bytes_all = 5; + float s_pkts_all = 6; + float s_ack_cnt = 7; + float s_bytes_uniq = 8; + float s_pkts_data = 9; + float s_bytes_all = 10; // Conection identifier - string ip_o = 9; - string port_o = 10; - string ip_d = 11; - string port_d = 12; - string flow_id = 13; - string service_id = 14; - string protocol = 15; - float time_start = 16; - float time_end = 17; + string ip_o = 11; + string port_o = 12; + string ip_d = 13; + string port_d = 14; + string flow_id = 15; + context.ServiceId service_id = 16; + context.EndPointId endpoint_id = 17; + string protocol = 18; + float time_start = 19; + float time_end = 20; } message Empty { diff --git a/scripts/scenario3/l3/README.md b/scripts/scenario3/l3/README.md new file mode 100644 index 000000000..f66d8e351 --- /dev/null +++ b/scripts/scenario3/l3/README.md @@ -0,0 +1,3 @@ +# Scripts to automatically run the "Attack Detection & Mitigation at the L3 Layer" workflow (Scenario 3). +"launch_l3_attack_detection_and_mitigation.sh" launches the TeraFlow OS components, which includes the CentralizedAttackDetector and AttackMitigator componentes necessary to perform this workflow. +"launch_l3_attack_detection_and_mitigation_complete.sh" also launches the DistributedAttackDetector, which monitors the network data plane and passively collects traffic packets and aggregates them in network flows, which are then provided to the CentralizedAttackDetector to detect attacks that may be occurring in the network. diff --git a/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation.sh b/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation.sh new file mode 100644 index 000000000..8243f042a --- /dev/null +++ b/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation.sh @@ -0,0 +1,9 @@ +cd /home/ubuntu/tfs-ctrl +source my_deploy.sh +./deploy.sh +./show_deploy.sh + +source tfs_runtime_env_vars.sh + +ofc22/run_test_01_bootstrap.sh +ofc22/run_test_02_create_service.sh diff --git a/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation_complete.sh b/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation_complete.sh new file mode 100644 index 000000000..8f9d24590 --- /dev/null +++ b/scripts/scenario3/l3/launch_l3_attack_detection_and_mitigation_complete.sh @@ -0,0 +1,11 @@ +cd /home/ubuntu/tfs-ctrl +source my_deploy.sh +./deploy.sh +./show_deploy.sh + +source tfs_runtime_env_vars.sh + +ofc22/run_test_01_bootstrap.sh +ofc22/run_test_02_create_service.sh + +sshpass -p "ubuntu" ssh -o StrictHostKeyChecking=no -n -f ubuntu@192.168.165.73 "sh -c 'nohup /home/ubuntu/TeraflowDockerDistributed/restart.sh > /dev/null 2>&1 &'" diff --git a/src/l3_attackmitigator/Dockerfile b/src/l3_attackmitigator/Dockerfile index 2b814f0ee..9ecc9bc12 100644 --- a/src/l3_attackmitigator/Dockerfile +++ b/src/l3_attackmitigator/Dockerfile @@ -63,6 +63,7 @@ RUN python3 -m pip install -r requirements.txt # Add component files into working directory WORKDIR /var/teraflow COPY src/l3_attackmitigator/. l3_attackmitigator +COPY src/monitoring/. monitoring # Start the service ENTRYPOINT ["python", "-m", "l3_attackmitigator.service"] diff --git a/src/l3_attackmitigator/dump.txt b/src/l3_attackmitigator/dump.txt new file mode 100644 index 000000000..63109855f --- /dev/null +++ b/src/l3_attackmitigator/dump.txt @@ -0,0 +1,184 @@ +----- Database Dump [182 entries] ------------------------- + [ set] ConfigModel/instances :: {'ConfigModel[O1-OLS:running]', 'ConfigModel[R1-EMU:running]', 'ConfigModel[R2-EMU:running]', 'ConfigModel[R3-EMU:running]', 'ConfigModel[R4-EMU:running]', 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running]', 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]'} + [dict] ConfigModel[O1-OLS:running] :: {'pk': 'O1-OLS:running'} + [ set] ConfigModel[O1-OLS:running]/references :: {'ConfigRuleModel[O1-OLS:running:3a759acf34501f21]:config_fk', 'ConfigRuleModel[O1-OLS:running:8c9564a0c5b96ab9]:config_fk', 'ConfigRuleModel[O1-OLS:running:ca87dd7146b3c377]:config_fk', 'ConfigRuleModel[O1-OLS:running:e17c13e1d2595abf]:config_fk', 'ConfigRuleModel[O1-OLS:running:e34b75892d5e4b98]:config_fk', 'DeviceModel[O1-OLS]:device_config_fk'} + [dict] ConfigModel[R1-EMU:running] :: {'pk': 'R1-EMU:running'} + [ set] ConfigModel[R1-EMU:running]/references :: {'ConfigRuleModel[R1-EMU:running:01c09c16fa7a1c42]:config_fk', 'ConfigRuleModel[R1-EMU:running:0a74a06e46cadf4d]:config_fk', 'ConfigRuleModel[R1-EMU:running:1522507a2c46f302]:config_fk', 'ConfigRuleModel[R1-EMU:running:25538c1a5a7413d6]:config_fk', 'ConfigRuleModel[R1-EMU:running:27e66bd8b5269276]:config_fk', 'ConfigRuleModel[R1-EMU:running:2984fb5629b5cfe0]:config_fk', 'ConfigRuleModel[R1-EMU:running:2c9ac49a866a7cdd]:config_fk', 'ConfigRuleModel[R1-EMU:running:50183717ae57e751]:config_fk', 'ConfigRuleModel[R1-EMU:running:5079ff9ab906b93d]:config_fk', 'ConfigRuleModel[R1-EMU:running:53b5477acb05a84b]:config_fk', 'ConfigRuleModel[R1-EMU:running:69a4986d322f94e3]:config_fk', 'ConfigRuleModel[R1-EMU:running:89925119fe702a08]:config_fk', 'ConfigRuleModel[R1-EMU:running:8c1c2310b4321b60]:config_fk', 'ConfigRuleModel[R1-EMU:running:93ceccde538188a9]:config_fk', 'ConfigRuleModel[R1-EMU:running:afbfa638d35357a6]:config_fk', 'ConfigRuleModel[R1-EMU:running:c5755579f473f6c6]:config_fk', 'ConfigRuleModel[R1-EMU:running:c8bd82d94b5dfbcf]:config_fk', 'ConfigRuleModel[R1-EMU:running:caeaf4702e128cde]:config_fk', 'ConfigRuleModel[R1-EMU:running:efff2baa1ee0efd4]:config_fk', 'DeviceModel[R1-EMU]:device_config_fk'} + [dict] ConfigModel[R2-EMU:running] :: {'pk': 'R2-EMU:running'} + [ set] ConfigModel[R2-EMU:running]/references :: {'ConfigRuleModel[R2-EMU:running:1522507a2c46f302]:config_fk', 'ConfigRuleModel[R2-EMU:running:afbfa638d35357a6]:config_fk', 'DeviceModel[R2-EMU]:device_config_fk'} + [dict] ConfigModel[R3-EMU:running] :: {'pk': 'R3-EMU:running'} + [ set] ConfigModel[R3-EMU:running]/references :: {'ConfigRuleModel[R3-EMU:running:01c09c16fa7a1c42]:config_fk', 'ConfigRuleModel[R3-EMU:running:1522507a2c46f302]:config_fk', 'ConfigRuleModel[R3-EMU:running:25538c1a5a7413d6]:config_fk', 'ConfigRuleModel[R3-EMU:running:27e66bd8b5269276]:config_fk', 'ConfigRuleModel[R3-EMU:running:2984fb5629b5cfe0]:config_fk', 'ConfigRuleModel[R3-EMU:running:2c9ac49a866a7cdd]:config_fk', 'ConfigRuleModel[R3-EMU:running:50183717ae57e751]:config_fk', 'ConfigRuleModel[R3-EMU:running:5079ff9ab906b93d]:config_fk', 'ConfigRuleModel[R3-EMU:running:53b5477acb05a84b]:config_fk', 'ConfigRuleModel[R3-EMU:running:69a4986d322f94e3]:config_fk', 'ConfigRuleModel[R3-EMU:running:89925119fe702a08]:config_fk', 'ConfigRuleModel[R3-EMU:running:8c1c2310b4321b60]:config_fk', 'ConfigRuleModel[R3-EMU:running:93ceccde538188a9]:config_fk', 'ConfigRuleModel[R3-EMU:running:afbfa638d35357a6]:config_fk', 'ConfigRuleModel[R3-EMU:running:b2c708c23571c108]:config_fk', 'ConfigRuleModel[R3-EMU:running:c8bd82d94b5dfbcf]:config_fk', 'ConfigRuleModel[R3-EMU:running:cabc97474c2cca7a]:config_fk', 'ConfigRuleModel[R3-EMU:running:caeaf4702e128cde]:config_fk', 'ConfigRuleModel[R3-EMU:running:efff2baa1ee0efd4]:config_fk', 'DeviceModel[R3-EMU]:device_config_fk'} + [dict] ConfigModel[R4-EMU:running] :: {'pk': 'R4-EMU:running'} + [ set] ConfigModel[R4-EMU:running]/references :: {'ConfigRuleModel[R4-EMU:running:1522507a2c46f302]:config_fk', 'ConfigRuleModel[R4-EMU:running:afbfa638d35357a6]:config_fk', 'DeviceModel[R4-EMU]:device_config_fk'} + [dict] ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running] :: {'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running'} + [ set] ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running]/references :: {'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running:d0f8a2a67d26b6de]:config_fk', 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]:service_config_fk'} + [dict] ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running] :: {'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running'} + [ set] ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]/references :: {'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:20b78ae0ce0a3460]:config_fk', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:299d6ac2d2edbf77]:config_fk', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:6a3ef52e178adab0]:config_fk', 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]:service_config_fk'} + [ set] ConfigRuleModel/instances :: {'ConfigRuleModel[O1-OLS:running:3a759acf34501f21]', 'ConfigRuleModel[O1-OLS:running:8c9564a0c5b96ab9]', 'ConfigRuleModel[O1-OLS:running:ca87dd7146b3c377]', 'ConfigRuleModel[O1-OLS:running:e17c13e1d2595abf]', 'ConfigRuleModel[O1-OLS:running:e34b75892d5e4b98]', 'ConfigRuleModel[R1-EMU:running:01c09c16fa7a1c42]', 'ConfigRuleModel[R1-EMU:running:0a74a06e46cadf4d]', 'ConfigRuleModel[R1-EMU:running:1522507a2c46f302]', 'ConfigRuleModel[R1-EMU:running:25538c1a5a7413d6]', 'ConfigRuleModel[R1-EMU:running:27e66bd8b5269276]', 'ConfigRuleModel[R1-EMU:running:2984fb5629b5cfe0]', 'ConfigRuleModel[R1-EMU:running:2c9ac49a866a7cdd]', 'ConfigRuleModel[R1-EMU:running:50183717ae57e751]', 'ConfigRuleModel[R1-EMU:running:5079ff9ab906b93d]', 'ConfigRuleModel[R1-EMU:running:53b5477acb05a84b]', 'ConfigRuleModel[R1-EMU:running:69a4986d322f94e3]', 'ConfigRuleModel[R1-EMU:running:89925119fe702a08]', 'ConfigRuleModel[R1-EMU:running:8c1c2310b4321b60]', 'ConfigRuleModel[R1-EMU:running:93ceccde538188a9]', 'ConfigRuleModel[R1-EMU:running:afbfa638d35357a6]', 'ConfigRuleModel[R1-EMU:running:c5755579f473f6c6]', 'ConfigRuleModel[R1-EMU:running:c8bd82d94b5dfbcf]', 'ConfigRuleModel[R1-EMU:running:caeaf4702e128cde]', 'ConfigRuleModel[R1-EMU:running:efff2baa1ee0efd4]', 'ConfigRuleModel[R2-EMU:running:1522507a2c46f302]', 'ConfigRuleModel[R2-EMU:running:afbfa638d35357a6]', 'ConfigRuleModel[R3-EMU:running:01c09c16fa7a1c42]', 'ConfigRuleModel[R3-EMU:running:1522507a2c46f302]', 'ConfigRuleModel[R3-EMU:running:25538c1a5a7413d6]', 'ConfigRuleModel[R3-EMU:running:27e66bd8b5269276]', 'ConfigRuleModel[R3-EMU:running:2984fb5629b5cfe0]', 'ConfigRuleModel[R3-EMU:running:2c9ac49a866a7cdd]', 'ConfigRuleModel[R3-EMU:running:50183717ae57e751]', 'ConfigRuleModel[R3-EMU:running:5079ff9ab906b93d]', 'ConfigRuleModel[R3-EMU:running:53b5477acb05a84b]', 'ConfigRuleModel[R3-EMU:running:69a4986d322f94e3]', 'ConfigRuleModel[R3-EMU:running:89925119fe702a08]', 'ConfigRuleModel[R3-EMU:running:8c1c2310b4321b60]', 'ConfigRuleModel[R3-EMU:running:93ceccde538188a9]', 'ConfigRuleModel[R3-EMU:running:afbfa638d35357a6]', 'ConfigRuleModel[R3-EMU:running:b2c708c23571c108]', 'ConfigRuleModel[R3-EMU:running:c8bd82d94b5dfbcf]', 'ConfigRuleModel[R3-EMU:running:cabc97474c2cca7a]', 'ConfigRuleModel[R3-EMU:running:caeaf4702e128cde]', 'ConfigRuleModel[R3-EMU:running:efff2baa1ee0efd4]', 'ConfigRuleModel[R4-EMU:running:1522507a2c46f302]', 'ConfigRuleModel[R4-EMU:running:afbfa638d35357a6]', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running:d0f8a2a67d26b6de]', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:20b78ae0ce0a3460]', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:299d6ac2d2edbf77]', 'ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:6a3ef52e178adab0]'} + [dict] ConfigRuleModel[O1-OLS:running:3a759acf34501f21] :: {'action': 'SET', 'config_fk': 'ConfigModel[O1-OLS:running]', 'key': '/endpoints/endpoint[50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]', 'pk': 'O1-OLS:running:3a759acf34501f21', 'position': '3', 'value': '{"sample_types": {}, "type": "optical", "uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}'} + [dict] ConfigRuleModel[O1-OLS:running:8c9564a0c5b96ab9] :: {'action': 'SET', 'config_fk': 'ConfigModel[O1-OLS:running]', 'key': '/service[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]', 'pk': 'O1-OLS:running:8c9564a0c5b96ab9', 'position': '4', 'value': '{"capacity_unit": "GHz", "capacity_value": 1, "direction": "UNIDIRECTIONAL", "input_sip": "aade6001-f00b-5e2f-a357-6a0a9d3de870", "layer_protocol_name": "PHOTONIC_MEDIA", "layer_protocol_qualifier": "tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC", "output_sip": "0ef74f99-1acc-57bd-ab9d-4b958b06c513", "uuid": "a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical"}'} + [dict] ConfigRuleModel[O1-OLS:running:ca87dd7146b3c377] :: {'action': 'SET', 'config_fk': 'ConfigModel[O1-OLS:running]', 'key': '/endpoints/endpoint[0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'pk': 'O1-OLS:running:ca87dd7146b3c377', 'position': '2', 'value': '{"sample_types": {}, "type": "optical", "uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}'} + [dict] ConfigRuleModel[O1-OLS:running:e17c13e1d2595abf] :: {'action': 'SET', 'config_fk': 'ConfigModel[O1-OLS:running]', 'key': '/endpoints/endpoint[aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'pk': 'O1-OLS:running:e17c13e1d2595abf', 'position': '0', 'value': '{"sample_types": {}, "type": "optical", "uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}'} + [dict] ConfigRuleModel[O1-OLS:running:e34b75892d5e4b98] :: {'action': 'SET', 'config_fk': 'ConfigModel[O1-OLS:running]', 'key': '/endpoints/endpoint[eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'pk': 'O1-OLS:running:e34b75892d5e4b98', 'position': '1', 'value': '{"sample_types": {}, "type": "optical", "uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}'} + [dict] ConfigRuleModel[R1-EMU:running:01c09c16fa7a1c42] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_import][route-target:65000:333]', 'pk': 'R1-EMU:running:01c09c16fa7a1c42', 'position': '12', 'value': '{"ext_community_member": "route-target:65000:333", "ext_community_set_name": "cc20bd3149a0-NetInst_rt_import"}'} + [dict] ConfigRuleModel[R1-EMU:running:0a74a06e46cadf4d] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/interface[13/1/2]/subinterface[400]', 'pk': 'R1-EMU:running:0a74a06e46cadf4d', 'position': '10', 'value': '{"address_ip": "3.3.2.1", "address_prefix": 24, "description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetSubIf", "index": 400, "name": "13/1/2", "vlan_id": 400}'} + [dict] ConfigRuleModel[R1-EMU:running:1522507a2c46f302] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/endpoints/endpoint[13/0/0]', 'pk': 'R1-EMU:running:1522507a2c46f302', 'position': '0', 'value': '{"sample_types": {}, "type": "optical", "uuid": "13/0/0"}'} + [dict] ConfigRuleModel[R1-EMU:running:25538c1a5a7413d6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]', 'pk': 'R1-EMU:running:25538c1a5a7413d6', 'position': '2', 'value': '{"description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetIf", "name": "cc20bd3149a0-NetInst", "route_distinguisher": "65000:100", "type": "L3VRF"}'} + [dict] ConfigRuleModel[R1-EMU:running:27e66bd8b5269276] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_import]', 'pk': 'R1-EMU:running:27e66bd8b5269276', 'position': '13', 'value': '{"policy_name": "cc20bd3149a0-NetInst_import"}'} + [dict] ConfigRuleModel[R1-EMU:running:2984fb5629b5cfe0] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]', 'pk': 'R1-EMU:running:2984fb5629b5cfe0', 'position': '6', 'value': '{"address_family": "IPV4", "dst_protocol": "BGP", "name": "cc20bd3149a0-NetInst", "src_protocol": "DIRECTLY_CONNECTED"}'} + [dict] ConfigRuleModel[R1-EMU:running:2c9ac49a866a7cdd] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_import]/statement[3]', 'pk': 'R1-EMU:running:2c9ac49a866a7cdd', 'position': '14', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_import", "match_set_options": "ANY", "policy_name": "cc20bd3149a0-NetInst_import", "policy_result": "ACCEPT_ROUTE", "statement_name": "3"}'} + [dict] ConfigRuleModel[R1-EMU:running:50183717ae57e751] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_export]', 'pk': 'R1-EMU:running:50183717ae57e751', 'position': '17', 'value': '{"policy_name": "cc20bd3149a0-NetInst_export"}'} + [dict] ConfigRuleModel[R1-EMU:running:5079ff9ab906b93d] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_export]', 'pk': 'R1-EMU:running:5079ff9ab906b93d', 'position': '15', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_export"}'} + [dict] ConfigRuleModel[R1-EMU:running:53b5477acb05a84b] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/table_connections[STATIC][BGP][IPV4]', 'pk': 'R1-EMU:running:53b5477acb05a84b', 'position': '5', 'value': '{"address_family": "IPV4", "dst_protocol": "BGP", "name": "cc20bd3149a0-NetInst", "src_protocol": "STATIC"}'} + [dict] ConfigRuleModel[R1-EMU:running:69a4986d322f94e3] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_import]', 'pk': 'R1-EMU:running:69a4986d322f94e3', 'position': '11', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_import"}'} + [dict] ConfigRuleModel[R1-EMU:running:89925119fe702a08] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/inter_instance_policies[cc20bd3149a0-NetInst_export]', 'pk': 'R1-EMU:running:89925119fe702a08', 'position': '8', 'value': '{"export_policy": "cc20bd3149a0-NetInst_export", "name": "cc20bd3149a0-NetInst"}'} + [dict] ConfigRuleModel[R1-EMU:running:8c1c2310b4321b60] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_export]/statement[3]', 'pk': 'R1-EMU:running:8c1c2310b4321b60', 'position': '18', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_export", "match_set_options": "ANY", "policy_name": "cc20bd3149a0-NetInst_export", "policy_result": "ACCEPT_ROUTE", "statement_name": "3"}'} + [dict] ConfigRuleModel[R1-EMU:running:93ceccde538188a9] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_export][route-target:65000:333]', 'pk': 'R1-EMU:running:93ceccde538188a9', 'position': '16', 'value': '{"ext_community_member": "route-target:65000:333", "ext_community_set_name": "cc20bd3149a0-NetInst_rt_export"}'} + [dict] ConfigRuleModel[R1-EMU:running:afbfa638d35357a6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/endpoints/endpoint[13/1/2]', 'pk': 'R1-EMU:running:afbfa638d35357a6', 'position': '1', 'value': '{"sample_types": {"101": "/endpoints/endpoint[13/1/2]/state/packets_transmitted", "102": "/endpoints/endpoint[13/1/2]/state/packets_received", "201": "/endpoints/endpoint[13/1/2]/state/bytes_transmitted", "202": "/endpoints/endpoint[13/1/2]/state/bytes_received"}, "type": "copper", "uuid": "13/1/2"}'} + [dict] ConfigRuleModel[R1-EMU:running:c5755579f473f6c6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/interface[13/1/2.400]', 'pk': 'R1-EMU:running:c5755579f473f6c6', 'position': '3', 'value': '{"id": "13/1/2.400", "interface": "13/1/2", "name": "cc20bd3149a0-NetInst", "subinterface": 400}'} + [dict] ConfigRuleModel[R1-EMU:running:c8bd82d94b5dfbcf] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/interface[13/1/2]', 'pk': 'R1-EMU:running:c8bd82d94b5dfbcf', 'position': '9', 'value': '{"description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetIf", "mtu": 1512, "name": "13/1/2"}'} + [dict] ConfigRuleModel[R1-EMU:running:caeaf4702e128cde] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/protocols[BGP]', 'pk': 'R1-EMU:running:caeaf4702e128cde', 'position': '4', 'value': '{"as": 65000, "identifier": "BGP", "name": "cc20bd3149a0-NetInst", "protocol_name": "BGP"}'} + [dict] ConfigRuleModel[R1-EMU:running:efff2baa1ee0efd4] :: {'action': 'SET', 'config_fk': 'ConfigModel[R1-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/inter_instance_policies[cc20bd3149a0-NetInst_import]', 'pk': 'R1-EMU:running:efff2baa1ee0efd4', 'position': '7', 'value': '{"import_policy": "cc20bd3149a0-NetInst_import", "name": "cc20bd3149a0-NetInst"}'} + [dict] ConfigRuleModel[R2-EMU:running:1522507a2c46f302] :: {'action': 'SET', 'config_fk': 'ConfigModel[R2-EMU:running]', 'key': '/endpoints/endpoint[13/0/0]', 'pk': 'R2-EMU:running:1522507a2c46f302', 'position': '0', 'value': '{"sample_types": {}, "type": "optical", "uuid": "13/0/0"}'} + [dict] ConfigRuleModel[R2-EMU:running:afbfa638d35357a6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R2-EMU:running]', 'key': '/endpoints/endpoint[13/1/2]', 'pk': 'R2-EMU:running:afbfa638d35357a6', 'position': '1', 'value': '{"sample_types": {"101": "/endpoints/endpoint[13/1/2]/state/packets_transmitted", "102": "/endpoints/endpoint[13/1/2]/state/packets_received", "201": "/endpoints/endpoint[13/1/2]/state/bytes_transmitted", "202": "/endpoints/endpoint[13/1/2]/state/bytes_received"}, "type": "copper", "uuid": "13/1/2"}'} + [dict] ConfigRuleModel[R3-EMU:running:01c09c16fa7a1c42] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_import][route-target:65000:333]', 'pk': 'R3-EMU:running:01c09c16fa7a1c42', 'position': '12', 'value': '{"ext_community_member": "route-target:65000:333", "ext_community_set_name": "cc20bd3149a0-NetInst_rt_import"}'} + [dict] ConfigRuleModel[R3-EMU:running:1522507a2c46f302] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/endpoints/endpoint[13/0/0]', 'pk': 'R3-EMU:running:1522507a2c46f302', 'position': '0', 'value': '{"sample_types": {}, "type": "optical", "uuid": "13/0/0"}'} + [dict] ConfigRuleModel[R3-EMU:running:25538c1a5a7413d6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]', 'pk': 'R3-EMU:running:25538c1a5a7413d6', 'position': '2', 'value': '{"description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetIf", "name": "cc20bd3149a0-NetInst", "route_distinguisher": "65000:200", "type": "L3VRF"}'} + [dict] ConfigRuleModel[R3-EMU:running:27e66bd8b5269276] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_import]', 'pk': 'R3-EMU:running:27e66bd8b5269276', 'position': '13', 'value': '{"policy_name": "cc20bd3149a0-NetInst_import"}'} + [dict] ConfigRuleModel[R3-EMU:running:2984fb5629b5cfe0] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]', 'pk': 'R3-EMU:running:2984fb5629b5cfe0', 'position': '6', 'value': '{"address_family": "IPV4", "dst_protocol": "BGP", "name": "cc20bd3149a0-NetInst", "src_protocol": "DIRECTLY_CONNECTED"}'} + [dict] ConfigRuleModel[R3-EMU:running:2c9ac49a866a7cdd] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_import]/statement[3]', 'pk': 'R3-EMU:running:2c9ac49a866a7cdd', 'position': '14', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_import", "match_set_options": "ANY", "policy_name": "cc20bd3149a0-NetInst_import", "policy_result": "ACCEPT_ROUTE", "statement_name": "3"}'} + [dict] ConfigRuleModel[R3-EMU:running:50183717ae57e751] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_export]', 'pk': 'R3-EMU:running:50183717ae57e751', 'position': '17', 'value': '{"policy_name": "cc20bd3149a0-NetInst_export"}'} + [dict] ConfigRuleModel[R3-EMU:running:5079ff9ab906b93d] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_export]', 'pk': 'R3-EMU:running:5079ff9ab906b93d', 'position': '15', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_export"}'} + [dict] ConfigRuleModel[R3-EMU:running:53b5477acb05a84b] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/table_connections[STATIC][BGP][IPV4]', 'pk': 'R3-EMU:running:53b5477acb05a84b', 'position': '5', 'value': '{"address_family": "IPV4", "dst_protocol": "BGP", "name": "cc20bd3149a0-NetInst", "src_protocol": "STATIC"}'} + [dict] ConfigRuleModel[R3-EMU:running:69a4986d322f94e3] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_import]', 'pk': 'R3-EMU:running:69a4986d322f94e3', 'position': '11', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_import"}'} + [dict] ConfigRuleModel[R3-EMU:running:89925119fe702a08] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/inter_instance_policies[cc20bd3149a0-NetInst_export]', 'pk': 'R3-EMU:running:89925119fe702a08', 'position': '8', 'value': '{"export_policy": "cc20bd3149a0-NetInst_export", "name": "cc20bd3149a0-NetInst"}'} + [dict] ConfigRuleModel[R3-EMU:running:8c1c2310b4321b60] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/policy_definition[cc20bd3149a0-NetInst_export]/statement[3]', 'pk': 'R3-EMU:running:8c1c2310b4321b60', 'position': '18', 'value': '{"ext_community_set_name": "cc20bd3149a0-NetInst_rt_export", "match_set_options": "ANY", "policy_name": "cc20bd3149a0-NetInst_export", "policy_result": "ACCEPT_ROUTE", "statement_name": "3"}'} + [dict] ConfigRuleModel[R3-EMU:running:93ceccde538188a9] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/routing_policy/bgp_defined_set[cc20bd3149a0-NetInst_rt_export][route-target:65000:333]', 'pk': 'R3-EMU:running:93ceccde538188a9', 'position': '16', 'value': '{"ext_community_member": "route-target:65000:333", "ext_community_set_name": "cc20bd3149a0-NetInst_rt_export"}'} + [dict] ConfigRuleModel[R3-EMU:running:afbfa638d35357a6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/endpoints/endpoint[13/1/2]', 'pk': 'R3-EMU:running:afbfa638d35357a6', 'position': '1', 'value': '{"sample_types": {"101": "/endpoints/endpoint[13/1/2]/state/packets_transmitted", "102": "/endpoints/endpoint[13/1/2]/state/packets_received", "201": "/endpoints/endpoint[13/1/2]/state/bytes_transmitted", "202": "/endpoints/endpoint[13/1/2]/state/bytes_received"}, "type": "copper", "uuid": "13/1/2"}'} + [dict] ConfigRuleModel[R3-EMU:running:b2c708c23571c108] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/interface[13/1/2]/subinterface[500]', 'pk': 'R3-EMU:running:b2c708c23571c108', 'position': '10', 'value': '{"address_ip": "3.3.1.1", "address_prefix": 24, "description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetSubIf", "index": 500, "name": "13/1/2", "vlan_id": 500}'} + [dict] ConfigRuleModel[R3-EMU:running:c8bd82d94b5dfbcf] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/interface[13/1/2]', 'pk': 'R3-EMU:running:c8bd82d94b5dfbcf', 'position': '9', 'value': '{"description": "a6086be7-62a1-4bd1-a084-cc20bd3149a0-NetIf", "mtu": 1512, "name": "13/1/2"}'} + [dict] ConfigRuleModel[R3-EMU:running:cabc97474c2cca7a] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/interface[13/1/2.500]', 'pk': 'R3-EMU:running:cabc97474c2cca7a', 'position': '3', 'value': '{"id": "13/1/2.500", "interface": "13/1/2", "name": "cc20bd3149a0-NetInst", "subinterface": 500}'} + [dict] ConfigRuleModel[R3-EMU:running:caeaf4702e128cde] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/protocols[BGP]', 'pk': 'R3-EMU:running:caeaf4702e128cde', 'position': '4', 'value': '{"as": 65000, "identifier": "BGP", "name": "cc20bd3149a0-NetInst", "protocol_name": "BGP"}'} + [dict] ConfigRuleModel[R3-EMU:running:efff2baa1ee0efd4] :: {'action': 'SET', 'config_fk': 'ConfigModel[R3-EMU:running]', 'key': '/network_instance[cc20bd3149a0-NetInst]/inter_instance_policies[cc20bd3149a0-NetInst_import]', 'pk': 'R3-EMU:running:efff2baa1ee0efd4', 'position': '7', 'value': '{"import_policy": "cc20bd3149a0-NetInst_import", "name": "cc20bd3149a0-NetInst"}'} + [dict] ConfigRuleModel[R4-EMU:running:1522507a2c46f302] :: {'action': 'SET', 'config_fk': 'ConfigModel[R4-EMU:running]', 'key': '/endpoints/endpoint[13/0/0]', 'pk': 'R4-EMU:running:1522507a2c46f302', 'position': '0', 'value': '{"sample_types": {}, "type": "optical", "uuid": "13/0/0"}'} + [dict] ConfigRuleModel[R4-EMU:running:afbfa638d35357a6] :: {'action': 'SET', 'config_fk': 'ConfigModel[R4-EMU:running]', 'key': '/endpoints/endpoint[13/1/2]', 'pk': 'R4-EMU:running:afbfa638d35357a6', 'position': '1', 'value': '{"sample_types": {"101": "/endpoints/endpoint[13/1/2]/state/packets_transmitted", "102": "/endpoints/endpoint[13/1/2]/state/packets_received", "201": "/endpoints/endpoint[13/1/2]/state/bytes_transmitted", "202": "/endpoints/endpoint[13/1/2]/state/bytes_received"}, "type": "copper", "uuid": "13/1/2"}'} + [dict] ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running:d0f8a2a67d26b6de] :: {'action': 'SET', 'config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running]', 'key': 'settings', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running:d0f8a2a67d26b6de', 'position': '0', 'value': '{"capacity_unit": "GHz", "capacity_value": 1, "direction": "UNIDIRECTIONAL", "layer_proto_name": "PHOTONIC_MEDIA", "layer_proto_qual": "tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC"}'} + [dict] ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:20b78ae0ce0a3460] :: {'action': 'SET', 'config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]', 'key': '/settings', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:20b78ae0ce0a3460', 'position': '0', 'value': '{"address_families": ["IPV4"], "bgp_as": 65000, "bgp_route_target": "65000:333", "mtu": 1512}'} + [dict] ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:299d6ac2d2edbf77] :: {'action': 'SET', 'config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]', 'key': '/device[R3-EMU]/endpoint[13/1/2]/settings', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:299d6ac2d2edbf77', 'position': '2', 'value': '{"address_ip": "3.3.1.1", "address_prefix": 24, "route_distinguisher": "65000:200", "router_id": "20.20.20.1", "sub_interface_index": 500, "vlan_id": 500}'} + [dict] ConfigRuleModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:6a3ef52e178adab0] :: {'action': 'SET', 'config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]', 'key': '/device[R1-EMU]/endpoint[13/1/2]/settings', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running:6a3ef52e178adab0', 'position': '1', 'value': '{"address_ip": "3.3.2.1", "address_prefix": 24, "route_distinguisher": "65000:100", "router_id": "10.10.10.1", "sub_interface_index": 400, "vlan_id": 400}'} + [ set] ConnectionModel/instances :: {'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]'} + [dict] ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router] :: {'connection_uuid': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]'} + [ set] ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]/references :: {'ConnectionSubServiceModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router--admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]:connection_fk'} + [dict] ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system] :: {'connection_uuid': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]'} + [ set] ConnectionSubServiceModel/instances :: {'ConnectionSubServiceModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router--admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]'} + [dict] ConnectionSubServiceModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router--admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical] :: {'connection_fk': 'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router--admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical', 'sub_service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]'} + [ set] ConstraintsModel/instances :: {'ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:constraints]', 'ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:constraints]'} + [dict] ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:constraints] :: {'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:constraints'} + [ set] ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:constraints]/references :: {'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]:service_constraints_fk'} + [dict] ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:constraints] :: {'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:constraints'} + [ set] ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:constraints]/references :: {'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]:service_constraints_fk'} + [ set] ContextModel/instances :: {'ContextModel[admin]'} + [dict] ContextModel[admin] :: {'context_uuid': 'admin', 'pk': 'admin'} + [ set] ContextModel[admin]/references :: {'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]:context_fk', 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]:context_fk', 'TopologyModel[admin/admin]:context_fk'} + [ set] DeviceModel/instances :: {'DeviceModel[O1-OLS]', 'DeviceModel[R1-EMU]', 'DeviceModel[R2-EMU]', 'DeviceModel[R3-EMU]', 'DeviceModel[R4-EMU]'} + [dict] DeviceModel[O1-OLS] :: {'device_config_fk': 'ConfigModel[O1-OLS:running]', 'device_operational_status': 'DISABLED', 'device_type': 'emu-optical-line-system', 'device_uuid': 'O1-OLS', 'pk': 'O1-OLS'} + [ set] DeviceModel[O1-OLS]/references :: {'DriverModel[O1-OLS/UNDEFINED]:device_fk', 'EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]:device_fk', 'EndPointModel[O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]:device_fk', 'EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]:device_fk', 'EndPointModel[O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]:device_fk'} + [dict] DeviceModel[R1-EMU] :: {'device_config_fk': 'ConfigModel[R1-EMU:running]', 'device_operational_status': 'DISABLED', 'device_type': 'emu-packet-router', 'device_uuid': 'R1-EMU', 'pk': 'R1-EMU'} + [ set] DeviceModel[R1-EMU]/references :: {'DriverModel[R1-EMU/UNDEFINED]:device_fk', 'EndPointModel[R1-EMU/13/0/0]:device_fk', 'EndPointModel[R1-EMU/13/1/2]:device_fk'} + [dict] DeviceModel[R2-EMU] :: {'device_config_fk': 'ConfigModel[R2-EMU:running]', 'device_operational_status': 'DISABLED', 'device_type': 'emu-packet-router', 'device_uuid': 'R2-EMU', 'pk': 'R2-EMU'} + [ set] DeviceModel[R2-EMU]/references :: {'DriverModel[R2-EMU/UNDEFINED]:device_fk', 'EndPointModel[R2-EMU/13/0/0]:device_fk', 'EndPointModel[R2-EMU/13/1/2]:device_fk'} + [dict] DeviceModel[R3-EMU] :: {'device_config_fk': 'ConfigModel[R3-EMU:running]', 'device_operational_status': 'DISABLED', 'device_type': 'emu-packet-router', 'device_uuid': 'R3-EMU', 'pk': 'R3-EMU'} + [ set] DeviceModel[R3-EMU]/references :: {'DriverModel[R3-EMU/UNDEFINED]:device_fk', 'EndPointModel[R3-EMU/13/0/0]:device_fk', 'EndPointModel[R3-EMU/13/1/2]:device_fk'} + [dict] DeviceModel[R4-EMU] :: {'device_config_fk': 'ConfigModel[R4-EMU:running]', 'device_operational_status': 'DISABLED', 'device_type': 'emu-packet-router', 'device_uuid': 'R4-EMU', 'pk': 'R4-EMU'} + [ set] DeviceModel[R4-EMU]/references :: {'DriverModel[R4-EMU/UNDEFINED]:device_fk', 'EndPointModel[R4-EMU/13/0/0]:device_fk', 'EndPointModel[R4-EMU/13/1/2]:device_fk'} + [ set] DriverModel/instances :: {'DriverModel[O1-OLS/UNDEFINED]', 'DriverModel[R1-EMU/UNDEFINED]', 'DriverModel[R2-EMU/UNDEFINED]', 'DriverModel[R3-EMU/UNDEFINED]', 'DriverModel[R4-EMU/UNDEFINED]'} + [dict] DriverModel[O1-OLS/UNDEFINED] :: {'device_fk': 'DeviceModel[O1-OLS]', 'driver': 'UNDEFINED', 'pk': 'O1-OLS/UNDEFINED'} + [dict] DriverModel[R1-EMU/UNDEFINED] :: {'device_fk': 'DeviceModel[R1-EMU]', 'driver': 'UNDEFINED', 'pk': 'R1-EMU/UNDEFINED'} + [dict] DriverModel[R2-EMU/UNDEFINED] :: {'device_fk': 'DeviceModel[R2-EMU]', 'driver': 'UNDEFINED', 'pk': 'R2-EMU/UNDEFINED'} + [dict] DriverModel[R3-EMU/UNDEFINED] :: {'device_fk': 'DeviceModel[R3-EMU]', 'driver': 'UNDEFINED', 'pk': 'R3-EMU/UNDEFINED'} + [dict] DriverModel[R4-EMU/UNDEFINED] :: {'device_fk': 'DeviceModel[R4-EMU]', 'driver': 'UNDEFINED', 'pk': 'R4-EMU/UNDEFINED'} + [ set] EndPointModel/instances :: {'EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'EndPointModel[O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]', 'EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'EndPointModel[O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'EndPointModel[R1-EMU/13/0/0]', 'EndPointModel[R1-EMU/13/1/2]', 'EndPointModel[R2-EMU/13/0/0]', 'EndPointModel[R2-EMU/13/1/2]', 'EndPointModel[R3-EMU/13/0/0]', 'EndPointModel[R3-EMU/13/1/2]', 'EndPointModel[R4-EMU/13/0/0]', 'EndPointModel[R4-EMU/13/1/2]'} + [dict] EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513] :: {'device_fk': 'DeviceModel[O1-OLS]', 'endpoint_type': 'optical', 'endpoint_uuid': '0ef74f99-1acc-57bd-ab9d-4b958b06c513', 'pk': 'O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513'} + [ set] EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]/references :: {'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--O1-OLS]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]:endpoint_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]:endpoint_fk'} + [dict] EndPointModel[O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec] :: {'device_fk': 'DeviceModel[O1-OLS]', 'endpoint_type': 'optical', 'endpoint_uuid': '50296d99-58cc-5ce7-82f5-fc8ee4eec2ec', 'pk': 'O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec'} + [ set] EndPointModel[O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]/references :: {'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--O1-OLS]:endpoint_fk'} + [dict] EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870] :: {'device_fk': 'DeviceModel[O1-OLS]', 'endpoint_type': 'optical', 'endpoint_uuid': 'aade6001-f00b-5e2f-a357-6a0a9d3de870', 'pk': 'O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870'} + [ set] EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]/references :: {'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--O1-OLS]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]:endpoint_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]:endpoint_fk'} + [dict] EndPointModel[O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418] :: {'device_fk': 'DeviceModel[O1-OLS]', 'endpoint_type': 'optical', 'endpoint_uuid': 'eb287d83-f05e-53ec-ab5a-adf6bd2b5418', 'pk': 'O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418'} + [ set] EndPointModel[O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]/references :: {'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--O1-OLS]:endpoint_fk'} + [dict] EndPointModel[R1-EMU/13/0/0] :: {'device_fk': 'DeviceModel[R1-EMU]', 'endpoint_type': 'optical', 'endpoint_uuid': '13/0/0', 'pk': 'R1-EMU/13/0/0'} + [ set] EndPointModel[R1-EMU/13/0/0]/references :: {'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--R1-EMU]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/0/0]:endpoint_fk'} + [dict] EndPointModel[R1-EMU/13/1/2] :: {'device_fk': 'DeviceModel[R1-EMU]', 'endpoint_type': 'copper', 'endpoint_uuid': '13/1/2', 'pk': 'R1-EMU/13/1/2'} + [ set] EndPointModel[R1-EMU/13/1/2]/references :: {'KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_TRANSMITTED]:endpoint_fk', 'KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_TRANSMITTED]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/1/2]:endpoint_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R1-EMU/13/1/2]:endpoint_fk'} + [dict] EndPointModel[R2-EMU/13/0/0] :: {'device_fk': 'DeviceModel[R2-EMU]', 'endpoint_type': 'optical', 'endpoint_uuid': '13/0/0', 'pk': 'R2-EMU/13/0/0'} + [ set] EndPointModel[R2-EMU/13/0/0]/references :: {'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--R2-EMU]:endpoint_fk'} + [dict] EndPointModel[R2-EMU/13/1/2] :: {'device_fk': 'DeviceModel[R2-EMU]', 'endpoint_type': 'copper', 'endpoint_uuid': '13/1/2', 'pk': 'R2-EMU/13/1/2'} + [ set] EndPointModel[R2-EMU/13/1/2]/references :: {'KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_TRANSMITTED]:endpoint_fk', 'KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_TRANSMITTED]:endpoint_fk'} + [dict] EndPointModel[R3-EMU/13/0/0] :: {'device_fk': 'DeviceModel[R3-EMU]', 'endpoint_type': 'optical', 'endpoint_uuid': '13/0/0', 'pk': 'R3-EMU/13/0/0'} + [ set] EndPointModel[R3-EMU/13/0/0]/references :: {'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--R3-EMU]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/0/0]:endpoint_fk'} + [dict] EndPointModel[R3-EMU/13/1/2] :: {'device_fk': 'DeviceModel[R3-EMU]', 'endpoint_type': 'copper', 'endpoint_uuid': '13/1/2', 'pk': 'R3-EMU/13/1/2'} + [ set] EndPointModel[R3-EMU/13/1/2]/references :: {'KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_TRANSMITTED]:endpoint_fk', 'KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_TRANSMITTED]:endpoint_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/1/2]:endpoint_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R3-EMU/13/1/2]:endpoint_fk'} + [dict] EndPointModel[R4-EMU/13/0/0] :: {'device_fk': 'DeviceModel[R4-EMU]', 'endpoint_type': 'optical', 'endpoint_uuid': '13/0/0', 'pk': 'R4-EMU/13/0/0'} + [ set] EndPointModel[R4-EMU/13/0/0]/references :: {'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--R4-EMU]:endpoint_fk'} + [dict] EndPointModel[R4-EMU/13/1/2] :: {'device_fk': 'DeviceModel[R4-EMU]', 'endpoint_type': 'copper', 'endpoint_uuid': '13/1/2', 'pk': 'R4-EMU/13/1/2'} + [ set] EndPointModel[R4-EMU/13/1/2]/references :: {'KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_TRANSMITTED]:endpoint_fk', 'KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_RECEIVED]:endpoint_fk', 'KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_TRANSMITTED]:endpoint_fk'} + [ set] KpiSampleTypeModel/instances :: {'KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_RECEIVED]', 'KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_TRANSMITTED]', 'KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_RECEIVED]', 'KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_TRANSMITTED]', 'KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_RECEIVED]', 'KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_TRANSMITTED]', 'KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_RECEIVED]', 'KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_TRANSMITTED]', 'KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_RECEIVED]', 'KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_TRANSMITTED]', 'KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_RECEIVED]', 'KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_TRANSMITTED]', 'KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_RECEIVED]', 'KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_TRANSMITTED]', 'KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_RECEIVED]', 'KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_TRANSMITTED]'} + [dict] KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_RECEIVED', 'pk': 'R1-EMU/13/1/2/BYTES_RECEIVED'} + [dict] KpiSampleTypeModel[R1-EMU/13/1/2/BYTES_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_TRANSMITTED', 'pk': 'R1-EMU/13/1/2/BYTES_TRANSMITTED'} + [dict] KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_RECEIVED', 'pk': 'R1-EMU/13/1/2/PACKETS_RECEIVED'} + [dict] KpiSampleTypeModel[R1-EMU/13/1/2/PACKETS_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_TRANSMITTED', 'pk': 'R1-EMU/13/1/2/PACKETS_TRANSMITTED'} + [dict] KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R2-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_RECEIVED', 'pk': 'R2-EMU/13/1/2/BYTES_RECEIVED'} + [dict] KpiSampleTypeModel[R2-EMU/13/1/2/BYTES_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R2-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_TRANSMITTED', 'pk': 'R2-EMU/13/1/2/BYTES_TRANSMITTED'} + [dict] KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R2-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_RECEIVED', 'pk': 'R2-EMU/13/1/2/PACKETS_RECEIVED'} + [dict] KpiSampleTypeModel[R2-EMU/13/1/2/PACKETS_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R2-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_TRANSMITTED', 'pk': 'R2-EMU/13/1/2/PACKETS_TRANSMITTED'} + [dict] KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_RECEIVED', 'pk': 'R3-EMU/13/1/2/BYTES_RECEIVED'} + [dict] KpiSampleTypeModel[R3-EMU/13/1/2/BYTES_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_TRANSMITTED', 'pk': 'R3-EMU/13/1/2/BYTES_TRANSMITTED'} + [dict] KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_RECEIVED', 'pk': 'R3-EMU/13/1/2/PACKETS_RECEIVED'} + [dict] KpiSampleTypeModel[R3-EMU/13/1/2/PACKETS_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_TRANSMITTED', 'pk': 'R3-EMU/13/1/2/PACKETS_TRANSMITTED'} + [dict] KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R4-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_RECEIVED', 'pk': 'R4-EMU/13/1/2/BYTES_RECEIVED'} + [dict] KpiSampleTypeModel[R4-EMU/13/1/2/BYTES_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R4-EMU/13/1/2]', 'kpi_sample_type': 'BYTES_TRANSMITTED', 'pk': 'R4-EMU/13/1/2/BYTES_TRANSMITTED'} + [dict] KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_RECEIVED] :: {'endpoint_fk': 'EndPointModel[R4-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_RECEIVED', 'pk': 'R4-EMU/13/1/2/PACKETS_RECEIVED'} + [dict] KpiSampleTypeModel[R4-EMU/13/1/2/PACKETS_TRANSMITTED] :: {'endpoint_fk': 'EndPointModel[R4-EMU/13/1/2]', 'kpi_sample_type': 'PACKETS_TRANSMITTED', 'pk': 'R4-EMU/13/1/2/PACKETS_TRANSMITTED'} + [ set] LinkEndPointModel/instances :: {'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--O1-OLS]', 'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--R1-EMU]', 'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--O1-OLS]', 'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--R2-EMU]', 'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--O1-OLS]', 'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--R3-EMU]', 'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--O1-OLS]', 'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--R4-EMU]'} + [dict] LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--O1-OLS] :: {'endpoint_fk': 'EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'link_fk': 'LinkModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'pk': 'R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--O1-OLS'} + [dict] LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--R1-EMU] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/0/0]', 'link_fk': 'LinkModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'pk': 'R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--R1-EMU'} + [dict] LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--O1-OLS] :: {'endpoint_fk': 'EndPointModel[O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'link_fk': 'LinkModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'pk': 'R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--O1-OLS'} + [dict] LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--R2-EMU] :: {'endpoint_fk': 'EndPointModel[R2-EMU/13/0/0]', 'link_fk': 'LinkModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'pk': 'R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--R2-EMU'} + [dict] LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--O1-OLS] :: {'endpoint_fk': 'EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'link_fk': 'LinkModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'pk': 'R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--O1-OLS'} + [dict] LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--R3-EMU] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/0/0]', 'link_fk': 'LinkModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'pk': 'R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--R3-EMU'} + [dict] LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--O1-OLS] :: {'endpoint_fk': 'EndPointModel[O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]', 'link_fk': 'LinkModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]', 'pk': 'R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--O1-OLS'} + [dict] LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--R4-EMU] :: {'endpoint_fk': 'EndPointModel[R4-EMU/13/0/0]', 'link_fk': 'LinkModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]', 'pk': 'R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--R4-EMU'} + [ set] LinkModel/instances :: {'LinkModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'LinkModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]', 'LinkModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'LinkModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]'} + [dict] LinkModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870] :: {'link_uuid': 'R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870', 'pk': 'R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870'} + [ set] LinkModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]/references :: {'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--O1-OLS]:link_fk', 'LinkEndPointModel[R1-EMU/13/0/0==O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870--R1-EMU]:link_fk'} + [dict] LinkModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418] :: {'link_uuid': 'R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418', 'pk': 'R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418'} + [ set] LinkModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418]/references :: {'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--O1-OLS]:link_fk', 'LinkEndPointModel[R2-EMU/13/0/0==O1-OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418--R2-EMU]:link_fk'} + [dict] LinkModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513] :: {'link_uuid': 'R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513', 'pk': 'R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513'} + [ set] LinkModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]/references :: {'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--O1-OLS]:link_fk', 'LinkEndPointModel[R3-EMU/13/0/0==O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513--R3-EMU]:link_fk'} + [dict] LinkModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec] :: {'link_uuid': 'R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec', 'pk': 'R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec'} + [ set] LinkModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec]/references :: {'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--O1-OLS]:link_fk', 'LinkEndPointModel[R4-EMU/13/0/0==O1-OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec--R4-EMU]:link_fk'} + [ set] PathHopModel/instances :: {'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/0/0]', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/1/2]', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/0/0]', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/1/2]', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/0/0] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/0/0]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/0/0', 'position': '1'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/1/2] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/1/2', 'position': '0'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/0/0] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/0/0]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/0/0', 'position': '2'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/1/2] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/1/2', 'position': '3'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513] :: {'endpoint_fk': 'EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513', 'position': '1'} + [dict] PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870] :: {'endpoint_fk': 'EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'path_fk': 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870', 'position': '0'} + [ set] PathModel/instances :: {'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]', 'PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]'} + [dict] PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router] :: {'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router'} + [ set] PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]/references :: {'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/0/0]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R1-EMU/13/1/2]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/0/0]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router:R3-EMU/13/1/2]:path_fk'} + [dict] PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system] :: {'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system'} + [ set] PathModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]/references :: {'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]:path_fk', 'PathHopModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system:O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]:path_fk'} + [ set] ServiceEndPointModel/instances :: {'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R1-EMU/13/1/2]', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R3-EMU/13/1/2]', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]'} + [dict] ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R1-EMU/13/1/2] :: {'endpoint_fk': 'EndPointModel[R1-EMU/13/1/2]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0--R1-EMU/13/1/2', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]'} + [dict] ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R3-EMU/13/1/2] :: {'endpoint_fk': 'EndPointModel[R3-EMU/13/1/2]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0--R3-EMU/13/1/2', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]'} + [dict] ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513] :: {'endpoint_fk': 'EndPointModel[O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]'} + [dict] ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870] :: {'endpoint_fk': 'EndPointModel[O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]', 'pk': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870', 'service_fk': 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]'} + [ set] ServiceModel/instances :: {'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]', 'ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]'} + [dict] ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical] :: {'context_fk': 'ContextModel[admin]', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical', 'service_config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:running]', 'service_constraints_fk': 'ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:constraints]', 'service_status': 'ACTIVE', 'service_type': 'TAPI_CONNECTIVITY_SERVICE', 'service_uuid': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical'} + [ set] ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]/references :: {'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical:emu-optical-line-system]:service_fk', 'ConnectionSubServiceModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router--admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical]:sub_service_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513]:service_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:optical--O1-OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870]:service_fk'} + [dict] ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0] :: {'context_fk': 'ContextModel[admin]', 'pk': 'admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0', 'service_config_fk': 'ConfigModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:running]', 'service_constraints_fk': 'ConstraintsModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0:constraints]', 'service_status': 'ACTIVE', 'service_type': 'L3NM', 'service_uuid': 'a6086be7-62a1-4bd1-a084-cc20bd3149a0'} + [ set] ServiceModel[admin/a6086be7-62a1-4bd1-a084-cc20bd3149a0]/references :: {'ConnectionModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0:emu-packet-router]:service_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R1-EMU/13/1/2]:service_fk', 'ServiceEndPointModel[a6086be7-62a1-4bd1-a084-cc20bd3149a0--R3-EMU/13/1/2]:service_fk'} + [ set] TopologyModel/instances :: {'TopologyModel[admin/admin]'} + [dict] TopologyModel[admin/admin] :: {'context_fk': 'ContextModel[admin]', 'pk': 'admin/admin', 'topology_uuid': 'admin'} +----------------------------------------------------------- \ No newline at end of file diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py index e53bcd214..3398d15a5 100644 --- a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py +++ b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py @@ -14,182 +14,106 @@ from __future__ import print_function import logging -from common.proto.l3_centralizedattackdetector_pb2 import ( - Empty -) -from common.proto.l3_attackmitigator_pb2_grpc import ( - L3AttackmitigatorServicer, -) +from common.proto.l3_centralizedattackdetector_pb2 import Empty +from common.proto.l3_attackmitigator_pb2_grpc import L3AttackmitigatorServicer from common.proto.context_pb2 import ( - Service, ServiceId, ServiceConfig, ServiceTypeEnum, ServiceStatusEnum, ServiceStatus, Context, ContextId, Uuid, Timestamp, ConfigRule, ConfigRule_Custom, ConfigActionEnum, Device, DeviceId, DeviceConfig, DeviceOperationalStatusEnum, DeviceDriverEnum, EndPoint, Link, LinkId, EndPoint, EndPointId, Topology, TopologyId -) -from common.proto.context_pb2_grpc import ( - ContextServiceStub -) -from common.proto.service_pb2_grpc import ( - ServiceServiceStub + Service, + ServiceId, + ServiceConfig, + ServiceTypeEnum, + ServiceStatusEnum, + ServiceStatus, + Context, + ContextId, + Uuid, + Timestamp, + ConfigRule, + ConfigRule_Custom, + ConfigActionEnum, + Device, + DeviceId, + DeviceConfig, + DeviceOperationalStatusEnum, + DeviceDriverEnum, + EndPoint, + Link, + LinkId, + EndPoint, + EndPointId, + Topology, + TopologyId, ) +from common.proto.context_pb2_grpc import ContextServiceStub +from common.proto.service_pb2_grpc import ServiceServiceStub from datetime import datetime import grpc +import time +import json + +# KPIs and Monitoring +from common.proto.monitoring_pb2 import KpiDescriptor +from common.proto.kpi_sample_types_pb2 import KpiSampleType + +# from monitoring.client.MonitoringClient import MonitoringClient +from monitoring.client.MonitoringClient import MonitoringClient +from common.proto.monitoring_pb2 import Kpi +from common.proto.context_pb2 import Timestamp LOGGER = logging.getLogger(__name__) CONTEXT_CHANNEL = "192.168.165.78:1010" SERVICE_CHANNEL = "192.168.165.78:3030" -class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): - - def GetNewService(self, service_id): - service = Service() - service_id_obj = self.GenerateServiceId(service_id) - """ - ServiceId() - context_id = ContextId() - uuid = Uuid() - uuid.uuid = service_id - context_id.context_uuid.CopyFrom(uuid) - service_id_obj.context_id.CopyFrom(context_id) - service_id_obj.service_uuid.CopyFrom(uuid) - """ - service.service_id.CopyFrom(service_id_obj) - service.service_type = ServiceTypeEnum.SERVICETYPE_L3NM - service_status = ServiceStatus() - service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE - service.service_status.CopyFrom(service_status) - timestamp = Timestamp() - timestamp.timestamp = datetime.timestamp(datetime.now()) - service.timestamp.CopyFrom(timestamp) - return service - - def GetNewContext(self, service_id): - context = Context() - context_id = ContextId() - uuid = Uuid() - uuid.uuid = service_id - context_id.context_uuid.CopyFrom(uuid) - context.context_id.CopyFrom(context_id) - return context - - def GetNewDevice(self, service_id): - device = Device() - device_id = DeviceId() - uuid = Uuid() - uuid.uuid = service_id - device_id.device_uuid.CopyFrom(uuid) - device.device_type="test" - device.device_id.CopyFrom(device_id) - device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED - return device - - def GetNewLink(self, service_id): - link = Link() - link_id = LinkId() - uuid = Uuid() - uuid.uuid = service_id - link_id.link_uuid.CopyFrom(uuid) - link.link_id.CopyFrom(link_id) - return link - - def GetNewTopology(self,context_id, device_id, link_id): - topology = Topology() - topology_id = TopologyId() - topology_id.context_id.CopyFrom(context_id) - uuid = Uuid() - uuid.uuid = "test_crypto" - topology_id.topology_uuid.CopyFrom(uuid) - topology.topology_id.CopyFrom(topology_id) - topology.device_ids.extend([device_id]) - topology.link_ids.extend([link_id]) - return topology - - def GetNewEndpoint(self, topology_id, device_id, uuid_name): - endpoint = EndPoint() - endpoint_id = EndPointId() - endpoint_id.topology_id.CopyFrom(topology_id) - endpoint_id.device_id.CopyFrom(device_id) - uuid = Uuid() - uuid.uuid = uuid_name - endpoint_id.endpoint_uuid.CopyFrom(uuid) - endpoint.endpoint_id.CopyFrom(endpoint_id) - endpoint.endpoint_type = "test" - return endpoint - +class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): def __init__(self): LOGGER.debug("Creating Servicer...") self.last_value = -1 self.last_tag = 0 - - context = self.GetNewContext("test_crypto") - print(context, flush=True) - print(self.SetContext(context)) + self.monitoring_client = MonitoringClient() + self.predicted_class_kpi_id = None + self.class_probability_kpi_id = None - service = self.GetNewService("test_crypto") - print("This is the new service", self.CreateService(service), flush = True) + def create_predicted_class_kpi(self, client: MonitoringClient, service_id): + # create kpi + kpi_description: KpiDescriptor = KpiDescriptor() + kpi_description.kpi_description = "L3 security status of service {}".format(service_id) + # kpi_description.service_id.service_uuid.uuid = service_id + kpi_description.service_id.service_uuid.uuid = str(service_id) + kpi_description.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_UNKNOWN + new_kpi = client.SetKpi(kpi_description) - ip_o = "127.0.0.1" - ip_d = "127.0.0.2" - port_o = "123" - port_d = "124" + LOGGER.info("Created Predicted Class KPI {}...".format(new_kpi.kpi_id)) - service_id = self.GenerateServiceId("test_crypto") + return new_kpi - config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) - - service = self.GetService(service_id) - print("Service obtained from id", service, flush=True) - - config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + def create_class_prob_kpi(self, client: MonitoringClient, service_id): + # create kpi + kpi_description: KpiDescriptor = KpiDescriptor() + kpi_description.kpi_description = "L3 security status of service {}".format(service_id) + kpi_description.service_id.service_uuid.uuid = service_id + kpi_description.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_UNKNOWN + new_kpi = client.SetKpi(kpi_description) - #service_config = service.service_config - #service_config.append(config_rule) - - service_config = ServiceConfig() - service_config.config_rules.extend([config_rule]) - service.service_config.CopyFrom(service_config) - - device = self.GetNewDevice("test_crypto") - print("New device", device, flush=True) - device_id = self.SetDevice(device) - - link = self.GetNewLink("test_crypto") - print("New link", link, flush=True) - link_id = self.SetLink(link) - - topology = self.GetNewTopology(context.context_id, device.device_id, link.link_id) - print("New topology", topology, flush=True) - topology_id = self.SetTopology(topology) - - endpoint = self.GetNewEndpoint(topology.topology_id, device.device_id, "test_crypto") - print("New endpoint", endpoint, flush=True) - link.link_endpoint_ids.extend([endpoint.endpoint_id]) - - self.SetLink(link) - - print("Service with new rule", service, flush=True) - self.UpdateService(service) + LOGGER.info("Created Class Probability KPI {}...".format(new_kpi.kpi_id)) - service2 = self.GetService(service_id) - print("Service obtained from id after updating", service2, flush=True) - + return new_kpi def GenerateRuleValue(self, ip_o, ip_d, port_o, port_d): value = { - 'ipv4:source-address': ip_o, - 'ipv4:destination-address': ip_d, - 'transport:source-port': port_o, - 'transport:destination-port': port_d, - 'forwarding-action': 'DROP', + "ipv4:source-address": ip_o, + "ipv4:destination-address": ip_d, + "transport:source-port": port_o, + "transport:destination-port": port_d, + "forwarding-action": "DROP", } return value - def GetConfigRule(self, ip_o, ip_d, port_o, port_d): - config_rule = ConfigRule() - config_rule_custom = ConfigRule_Custom() - config_rule.action = ConfigActionEnum.CONFIGACTION_SET - config_rule_custom.resource_key = 'test' - config_rule_custom.resource_value = str(self.GenerateRuleValue(ip_o, ip_d, port_o, port_d)) - config_rule.custom.CopyFrom(config_rule_custom) - return config_rule + def GenerateContextId(self, context_id): + context_id_obj = ContextId() + uuid = Uuid() + uuid.uuid = context_id + context_id_obj.context_uuid.CopyFrom(uuid) + return context_id_obj def GenerateServiceId(self, service_id): service_id_obj = ServiceId() @@ -200,11 +124,21 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): service_id_obj.context_id.CopyFrom(context_id) service_id_obj.service_uuid.CopyFrom(uuid) return service_id_obj - + + def GetConfigRule(self, ip_o, ip_d, port_o, port_d): + config_rule = ConfigRule() + config_rule_custom = ConfigRule_Custom() + config_rule.action = ConfigActionEnum.CONFIGACTION_SET + config_rule_custom.resource_key = "test" + # config_rule_custom.resource_value = str(self.GenerateRuleValue(ip_o, ip_d, port_o, port_d)) + config_rule_custom.resource_value = json.dumps(self.GenerateRuleValue(ip_o, ip_d, port_o, port_d)) + config_rule.custom.CopyFrom(config_rule_custom) + return config_rule + def SendOutput(self, request, context): # SEND CONFIDENCE TO MITIGATION SERVER print("Server received mitigation values...", request.confidence, flush=True) - + last_value = request.confidence last_tag = request.tag @@ -213,62 +147,93 @@ class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): port_o = request.port_o port_d = request.port_d - service_id = self.GenerateServiceId(request.service_id) + # service_id = self.GenerateServiceId(request.service_id) + # service = GetService(service_id) + + # context_id = self.GenerateContextId("admin") + + sentinel = True + counter = 0 + + # service_id_list = self.ListServiceIds(context_id) + + # print(hello, flush = True) + # print(hello.service_ids[0].service_uuid.uuid, flush=True) + + # service_id = service_id_list.service_ids[0] + service_id = request.service_id + + print("Service id: ", service_id, flush=True) + + while sentinel: + try: + service = self.GetService(service_id) + sentinel = False + except Exception as e: + counter = counter + 1 + print("Waiting 2 seconds", counter, e, flush=True) + time.sleep(2) + + print("Service obtained from id: ", service, flush=True) + + if self.predicted_class_kpi_id is None: + self.predicted_class_kpi_id = self.create_predicted_class_kpi(self.monitoring_client, service_id) + + if self.class_probability_kpi_id is None: + self.class_probability_kpi_id = self.create_class_prob_kpi(self.monitoring_client, service_id) + + # Monitoring + # Packet -> DAD -> CAD -> ML -> (2 Instantaneous Value: higher class probability, predicted class) -> Monitoring + # In addition, two counters: + # Counter 1: Total number of crypto attack connections + # Counter 2: Rate of crypto attack connections with respect to the total number of connections + + kpi_class = Kpi() + kpi_class.kpi_id.kpi_id.uuid = self.predicted_class_kpi_id.uuid + kpi_class.kpi_value.int32Val = 1 if request.tag_name == "Crypto" else 0 + + kpi_prob = Kpi() + kpi_prob.kpi_id.kpi_id.uuid = self.class_probability_kpi_id.uuid + kpi_prob.kpi_value.floatVal = request.confidence + + kpi_class.timestamp = kpi_prob.timestamp = Timestamp() + + self.monitoring_client.IncludeKpi(kpi_class) + self.monitoring_client.IncludeKpi(kpi_prob) config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) - - service = GetService(service_id) - print(service) - #service.config_rules.append(config_rule) - #UpdateService(service) - # RETURN OK TO THE CALLER - return Empty( - message=f"OK, received values: {last_tag} with confidence {last_value}." - ) - - def SetDevice(self, device): - with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: - stub = ContextServiceStub(channel) - return stub.SetDevice(device) + service_config = ServiceConfig() + service_config.config_rules.extend([config_rule]) + service.service_config.CopyFrom(service_config) - def SetLink(self, link): - with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: - stub = ContextServiceStub(channel) - return stub.SetLink(link) + print("Service with new rule: ", service, flush=True) + self.UpdateService(service) - def SetTopology(self, link): - with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: - stub = ContextServiceStub(channel) - return stub.SetTopology(link) + service2 = self.GetService(service_id) + print("Service obtained from id after updating: ", service2, flush=True) + # RETURN OK TO THE CALLER + return Empty(message=f"OK, received values: {last_tag} with confidence {last_value}.") def GetService(self, service_id): with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: stub = ContextServiceStub(channel) return stub.GetService(service_id) - def SetContext(self, context): + def ListServiceIds(self, context_id): with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: stub = ContextServiceStub(channel) - return stub.SetContext(context) + return stub.ListServiceIds(context_id) def UpdateService(self, service): with grpc.insecure_channel(SERVICE_CHANNEL) as channel: stub = ServiceServiceStub(channel) stub.UpdateService(service) - def CreateService(self, service): - with grpc.insecure_channel(SERVICE_CHANNEL) as channel: - stub = ServiceServiceStub(channel) - stub.CreateService(service) - def GetMitigation(self, request, context): # GET OR PERFORM MITIGATION STRATEGY logging.debug("") print("Returing mitigation strategy...") k = self.last_value * 2 - return Empty( - message=f"Mitigation with double confidence = {k}" - ) - + return Empty(message=f"Mitigation with double confidence = {k}") diff --git a/src/l3_attackmitigator/service/test_create_service.py b/src/l3_attackmitigator/service/test_create_service.py new file mode 100644 index 000000000..9ddbc97d7 --- /dev/null +++ b/src/l3_attackmitigator/service/test_create_service.py @@ -0,0 +1,265 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function +import logging +from common.proto.l3_centralizedattackdetector_pb2 import ( + Empty +) +from common.proto.l3_attackmitigator_pb2_grpc import ( + L3AttackmitigatorServicer, +) +from common.proto.context_pb2 import ( + Service, ServiceId, ServiceConfig, ServiceTypeEnum, ServiceStatusEnum, ServiceStatus, Context, ContextId, Uuid, Timestamp, ConfigRule, ConfigRule_Custom, ConfigActionEnum, Device, DeviceId, DeviceConfig, DeviceOperationalStatusEnum, DeviceDriverEnum, EndPoint, Link, LinkId, EndPoint, EndPointId, Topology, TopologyId +) +from common.proto.context_pb2_grpc import ( + ContextServiceStub +) +from common.proto.service_pb2_grpc import ( + ServiceServiceStub +) +from datetime import datetime +import grpc + +LOGGER = logging.getLogger(__name__) +CONTEXT_CHANNEL = "192.168.165.78:1010" +SERVICE_CHANNEL = "192.168.165.78:3030" + +class l3_attackmitigatorServiceServicerImpl(L3AttackmitigatorServicer): + + def GetNewService(self, service_id): + service = Service() + service_id_obj = self.GenerateServiceId(service_id) + service.service_id.CopyFrom(service_id_obj) + service.service_type = ServiceTypeEnum.SERVICETYPE_L3NM + service_status = ServiceStatus() + service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE + service.service_status.CopyFrom(service_status) + timestamp = Timestamp() + timestamp.timestamp = datetime.timestamp(datetime.now()) + service.timestamp.CopyFrom(timestamp) + return service + + def GetNewContext(self, service_id): + context = Context() + context_id = ContextId() + uuid = Uuid() + uuid.uuid = service_id + context_id.context_uuid.CopyFrom(uuid) + context.context_id.CopyFrom(context_id) + return context + + def GetNewDevice(self, service_id): + device = Device() + device_id = DeviceId() + uuid = Uuid() + uuid.uuid = service_id + device_id.device_uuid.CopyFrom(uuid) + device.device_type="test" + device.device_id.CopyFrom(device_id) + device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED + return device + + def GetNewLink(self, service_id): + link = Link() + link_id = LinkId() + uuid = Uuid() + uuid.uuid = service_id + link_id.link_uuid.CopyFrom(uuid) + link.link_id.CopyFrom(link_id) + return link + + def GetNewTopology(self,context_id, device_id, link_id): + topology = Topology() + topology_id = TopologyId() + topology_id.context_id.CopyFrom(context_id) + uuid = Uuid() + uuid.uuid = "test_crypto" + topology_id.topology_uuid.CopyFrom(uuid) + topology.topology_id.CopyFrom(topology_id) + topology.device_ids.extend([device_id]) + topology.link_ids.extend([link_id]) + return topology + + def GetNewEndpoint(self, topology_id, device_id, uuid_name): + endpoint = EndPoint() + endpoint_id = EndPointId() + endpoint_id.topology_id.CopyFrom(topology_id) + endpoint_id.device_id.CopyFrom(device_id) + uuid = Uuid() + uuid.uuid = uuid_name + endpoint_id.endpoint_uuid.CopyFrom(uuid) + endpoint.endpoint_id.CopyFrom(endpoint_id) + endpoint.endpoint_type = "test" + return endpoint + + + def __init__(self): + LOGGER.debug("Creating Servicer...") + self.last_value = -1 + self.last_tag = 0 + """ + context = self.GetNewContext("test_crypto") + print(context, flush=True) + print(self.SetContext(context)) + + service = self.GetNewService("test_crypto") + print("This is the new service", self.CreateService(service), flush = True) + + ip_o = "127.0.0.1" + ip_d = "127.0.0.2" + port_o = "123" + port_d = "124" + + service_id = self.GenerateServiceId("test_crypto") + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + service = self.GetService(service_id) + print("Service obtained from id", service, flush=True) + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + #service_config = service.service_config + #service_config.append(config_rule) + + service_config = ServiceConfig() + service_config.config_rules.extend([config_rule]) + service.service_config.CopyFrom(service_config) + + device = self.GetNewDevice("test_crypto") + print("New device", device, flush=True) + device_id = self.SetDevice(device) + + link = self.GetNewLink("test_crypto") + print("New link", link, flush=True) + link_id = self.SetLink(link) + + topology = self.GetNewTopology(context.context_id, device.device_id, link.link_id) + print("New topology", topology, flush=True) + topology_id = self.SetTopology(topology) + + endpoint = self.GetNewEndpoint(topology.topology_id, device.device_id, "test_crypto") + print("New endpoint", endpoint, flush=True) + link.link_endpoint_ids.extend([endpoint.endpoint_id]) + + self.SetLink(link) + + print("Service with new rule", service, flush=True) + self.UpdateService(service) + + service2 = self.GetService(service_id) + print("Service obtained from id after updating", service2, flush=True) + """ + + def GenerateRuleValue(self, ip_o, ip_d, port_o, port_d): + value = { + 'ipv4:source-address': ip_o, + 'ipv4:destination-address': ip_d, + 'transport:source-port': port_o, + 'transport:destination-port': port_d, + 'forwarding-action': 'DROP', + } + return value + + def GetConfigRule(self, ip_o, ip_d, port_o, port_d): + config_rule = ConfigRule() + config_rule_custom = ConfigRule_Custom() + config_rule.action = ConfigActionEnum.CONFIGACTION_SET + config_rule_custom.resource_key = 'test' + config_rule_custom.resource_value = str(self.GenerateRuleValue(ip_o, ip_d, port_o, port_d)) + config_rule.custom.CopyFrom(config_rule_custom) + return config_rule + + def GenerateServiceId(self, service_id): + service_id_obj = ServiceId() + context_id = ContextId() + uuid = Uuid() + uuid.uuid = service_id + context_id.context_uuid.CopyFrom(uuid) + service_id_obj.context_id.CopyFrom(context_id) + service_id_obj.service_uuid.CopyFrom(uuid) + return service_id_obj + + def SendOutput(self, request, context): + # SEND CONFIDENCE TO MITIGATION SERVER + print("Server received mitigation values...", request.confidence, flush=True) + + last_value = request.confidence + last_tag = request.tag + + ip_o = request.ip_o + ip_d = request.ip_d + port_o = request.port_o + port_d = request.port_d + + service_id = self.GenerateServiceId(request.service_id) + + config_rule = self.GetConfigRule(ip_o, ip_d, port_o, port_d) + + service = GetService(service_id) + print(service) + #service.config_rules.append(config_rule) + #UpdateService(service) + + # RETURN OK TO THE CALLER + return Empty( + message=f"OK, received values: {last_tag} with confidence {last_value}." + ) + + def SetDevice(self, device): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetDevice(device) + + def SetLink(self, link): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetLink(link) + + def SetTopology(self, link): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetTopology(link) + + + def GetService(self, service_id): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.GetService(service_id) + + def SetContext(self, context): + with grpc.insecure_channel(CONTEXT_CHANNEL) as channel: + stub = ContextServiceStub(channel) + return stub.SetContext(context) + + def UpdateService(self, service): + with grpc.insecure_channel(SERVICE_CHANNEL) as channel: + stub = ServiceServiceStub(channel) + stub.UpdateService(service) + + def CreateService(self, service): + with grpc.insecure_channel(SERVICE_CHANNEL) as channel: + stub = ServiceServiceStub(channel) + stub.CreateService(service) + + def GetMitigation(self, request, context): + # GET OR PERFORM MITIGATION STRATEGY + logging.debug("") + print("Returing mitigation strategy...") + k = self.last_value * 2 + return Empty( + message=f"Mitigation with double confidence = {k}" + ) + diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py index a84ac181e..f9f39cf70 100644 --- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py +++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py @@ -19,26 +19,21 @@ import grpc import numpy as np import onnxruntime as rt import logging -from common.proto.l3_centralizedattackdetector_pb2 import ( - Empty, -) -from common.proto.l3_centralizedattackdetector_pb2_grpc import ( - L3CentralizedattackdetectorServicer, -) - -from common.proto.l3_attackmitigator_pb2 import ( - L3AttackmitigatorOutput, -) -from common.proto.l3_attackmitigator_pb2_grpc import ( - L3AttackmitigatorStub, -) +from common.proto.l3_centralizedattackdetector_pb2 import Empty +from common.proto.l3_centralizedattackdetector_pb2_grpc import L3CentralizedattackdetectorServicer + +from common.proto.l3_attackmitigator_pb2 import L3AttackmitigatorOutput +from common.proto.l3_attackmitigator_pb2_grpc import L3AttackmitigatorStub + LOGGER = logging.getLogger(__name__) here = os.path.dirname(os.path.abspath(__file__)) -MODEL_FILE = os.path.join(here, "ml_model/teraflow_rf.onnx") +MODEL_FILE = os.path.join(here, "ml_model/crypto_5g_rf_spider_features.onnx") + +classification_threshold = os.getenv("CAD_CLASSIFICATION_THRESHOLD", 0.5) -class l3_centralizedattackdetectorServiceServicerImpl(L3CentralizedattackdetectorServicer): +class l3_centralizedattackdetectorServiceServicerImpl(L3CentralizedattackdetectorServicer): def __init__(self): LOGGER.debug("Creating Servicer...") self.inference_values = [] @@ -46,25 +41,27 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto self.input_name = self.model.get_inputs()[0].name self.label_name = self.model.get_outputs()[0].name self.prob_name = self.model.get_outputs()[1].name - def make_inference(self, request): # ML MODEL - x_data = np.array([ + x_data = np.array( + [ [ - request.n_packets_server_seconds, - request.n_packets_client_seconds, - request.n_bits_server_seconds, - request.n_bits_client_seconds, - request.n_bits_server_n_packets_server, - request.n_bits_client_n_packets_client, - request.n_packets_server_n_packets_client, - request.n_bits_server_n_bits_client, + request.c_pkts_all, + request.c_ack_cnt, + request.c_bytes_uniq, + request.c_pkts_data, + request.c_bytes_all, + request.s_pkts_all, + request.s_ack_cnt, + request.s_bytes_uniq, + request.s_pkts_data, + request.s_bytes_all, ] - ]) + ] + ) - predictions = self.model.run( - [self.prob_name], {self.input_name: x_data.astype(np.float32)})[0] + predictions = self.model.run([self.prob_name], {self.input_name: x_data.astype(np.float32)})[0] # Output format output_message = { "confidence": None, @@ -82,7 +79,7 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto "time_start": request.time_start, "time_end": request.time_end, } - if predictions[0][1] >= 0.5: + if predictions[0][1] >= classification_threshold: output_message["confidence"] = predictions[0][1] output_message["tag_name"] = "Crypto" output_message["tag"] = 1 @@ -104,28 +101,25 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto # MAKE INFERENCE output = self.make_inference(request) - # SEND INFO TO MITIGATION SERVER - - - try: - with grpc.insecure_channel("192.168.165.78:10002") as channel: - stub = L3AttackmitigatorStub(channel) - print("Sending to mitigator...") - response = stub.SendOutput(output) - #print("Response received", response, "Hola", flush=True) - #print("Sent output to mitigator and received: ", response.message) #FIX No message received - - # RETURN "OK" TO THE CALLER - return Empty( - message="OK, information received and mitigator notified" - ) - except Exception as e: - print("This is an exception", repr(e), flush=True) - print('Couldnt find l3_attackmitigator') - return Empty( - message="Mitigator Not found" - ) - + if output.tag_name == "Crypto": + # SEND INFO TO MITIGATION SERVER + try: + with grpc.insecure_channel("192.168.165.78:10002") as channel: + stub = L3AttackmitigatorStub(channel) + print("Sending to mitigator...", flush=True) + response = stub.SendOutput(output) + # print("Response received", response, "Hola", flush=True) + # print("Sent output to mitigator and received: ", response.message) #FIX No message received + + # RETURN "OK" TO THE CALLER + return Empty(message="OK, information received and mitigator notified abou the attack") + except Exception as e: + print("This is an exception", repr(e), flush=True) + print("Couldnt find l3_attackmitigator", flush=True) + return Empty(message="Mitigator Not found") + else: + print("No attack detected", flush=True) + return Empty(message="OK, information received (no attack detected)") def GetOutput(self, request, context): logging.debug("") @@ -134,6 +128,3 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto k = np.sum(k) return self.make_inference(k) - - - diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl_old.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl_old.py new file mode 100644 index 000000000..7201d817d --- /dev/null +++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl_old.py @@ -0,0 +1,141 @@ +# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function +from datetime import datetime +import os +import grpc +import numpy as np +import onnxruntime as rt +import logging +from common.proto.l3_centralizedattackdetector_pb2 import ( + Empty, +) +from common.proto.l3_centralizedattackdetector_pb2_grpc import ( + L3CentralizedattackdetectorServicer, +) + +from common.proto.l3_attackmitigator_pb2 import ( + L3AttackmitigatorOutput, +) +from common.proto.l3_attackmitigator_pb2_grpc import ( + L3AttackmitigatorStub, +) + +LOGGER = logging.getLogger(__name__) +here = os.path.dirname(os.path.abspath(__file__)) +MODEL_FILE = os.path.join(here, "ml_model/crypto_5g_rf_teraflow_features.onnx") + +classification_threshold = os.getenv(CAD_CLASSIFICATION_THRESHOLD, 0.5) + +class l3_centralizedattackdetectorServiceServicerImpl(L3CentralizedattackdetectorServicer): + + def __init__(self): + LOGGER.debug("Creating Servicer...") + self.inference_values = [] + self.model = rt.InferenceSession(MODEL_FILE) + self.input_name = self.model.get_inputs()[0].name + self.label_name = self.model.get_outputs()[0].name + self.prob_name = self.model.get_outputs()[1].name + + + def make_inference(self, request): + # ML MODEL + x_data = np.array([ + [ + request.n_packets_server_seconds, + request.n_packets_client_seconds, + request.n_bits_server_seconds, + request.n_bits_client_seconds, + request.n_bits_server_n_packets_server, + request.n_bits_client_n_packets_client, + request.n_packets_server_n_packets_client, + request.n_bits_server_n_bits_client, + ] + ]) + + predictions = self.model.run( + [self.prob_name], {self.input_name: x_data.astype(np.float32)})[0] + # Output format + output_message = { + "confidence": None, + "timestamp": datetime.now().strftime("%d/%m/%Y %H:%M:%S"), + "ip_o": request.ip_o, + "ip_d": request.ip_d, + "tag_name": None, + "tag": None, + "flow_id": request.flow_id, + "protocol": request.protocol, + "port_o": request.port_o, + "port_d": request.port_d, + "ml_id": "RandomForest", + # "service_id": request.service_id, + "time_start": request.time_start, + "time_end": request.time_end, + } + if predictions[0][1] >= classification_threshold: + output_message["confidence"] = predictions[0][1] + output_message["tag_name"] = "Crypto" + output_message["tag"] = 1 + else: + output_message["confidence"] = predictions[0][0] + output_message["tag_name"] = "Normal" + output_message["tag"] = 0 + + return L3AttackmitigatorOutput(**output_message) + + def SendInput(self, request, context): + # PERFORM INFERENCE WITH SENT INPUTS + logging.debug("") + print("Inferencing ...", flush=True) + + # STORE VALUES + self.inference_values.append(request) + + # MAKE INFERENCE + output = self.make_inference(request) + + # SEND INFO TO MITIGATION SERVER + + + try: + with grpc.insecure_channel("192.168.165.78:10002") as channel: + stub = L3AttackmitigatorStub(channel) + print("Sending to mitigator...") + response = stub.SendOutput(output) + #print("Response received", response, "Hola", flush=True) + #print("Sent output to mitigator and received: ", response.message) #FIX No message received + + # RETURN "OK" TO THE CALLER + return Empty( + message="OK, information received and mitigator notified" + ) + except Exception as e: + print("This is an exception", repr(e), flush=True) + print('Couldnt find l3_attackmitigator') + return Empty( + message="Mitigator Not found" + ) + + + def GetOutput(self, request, context): + logging.debug("") + print("Returing inference output...") + k = np.multiply(self.inference_values, [2]) + k = np.sum(k) + return self.make_inference(k) + + + + diff --git a/src/l3_centralizedattackdetector/service/ml_model/crypto_5g_rf_spider_features.onnx b/src/l3_centralizedattackdetector/service/ml_model/crypto_5g_rf_spider_features.onnx new file mode 100644 index 0000000000000000000000000000000000000000..5b22b5f3d673960bf6d9a72bb6873d8f4886b89a GIT binary patch literal 1304368 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¥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%0A&YKQD>)ps7K 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�dg!hG)@utOfE&86O9uw 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

Q{-U}2Qwo+ApYog@1-;?CQO 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Í~!|E9y9@!AU>Gh8!htcET~8 z2=7G5Clm&RtwMf+Km?|M+N9+ZeET5Fy+)Z&u*;^1O3c*Syp<=K4hlg$Fq9_qs{ABx z(w1l`$TNbn#2D(;<91Tk@6FB?x|PMp5KBx;9503mjo zN1#O6K1JC|Ko{-1r?z{FlDV@7(}mpRIn|!8p0Cy5U~xZOgeTyPIuoJ1W=?I8kessu z=Hk+m59I%m3MXnOavBTJbq+Ks+s^k~c$df+Pj57LQ(JFamp_ zUtDUv3GuA1SRL zLyaQqFE>BYw2{PqzWHfvKf~Y8x%ZcvU-VXbaj&hG->ftIS!Yo021 z4sEWp07aHtD(Q&>;*uWKiDg;Ft{U3hQD?c&6z3i_*T!a^!~aH2_X67CvR?f;Bvduf zG1|$@C`|xmse=QSlL>vOVuhhK0pp-GAuUdNVLRLu(`qA$L3Ikykr$!EEH^=j!h(8y zN$~>T;f9#zJcF5OeUg}bIkY5x$vddL(m-dHXvU>M8gu$WbmB8NMzGB-HQ|doZgy&z zI?bX!2~gBpR+7D_zN+9H9tQdp9c;ZJ52sTH=xpq3He}?3+8F0Rb~OA6YfZMQv0cUE zG4pM-FUely^o}JZd({Qi+22u|z;RxY`L#Oipelz|yg4}c{E2vgY(8)lvG>$|KSr)c zsvtelyM5IsJ<7S-HC<2wmNP4Gg0BOrT#)L8%k(f|n`_m3y^4k1R4gM@Fva=CT}o)$shV1~7vNg+s6#No-Rb9xq5|$FSsj(Hu{xD-;Lq3D@(u zs>^~CzDEr^Ka|)3`MgmbS)YeCz;yUP!=>$51BWQF#0tqBSW@heais z&t*2S4hNEBh|N+J*rQJpjS5F*nm1W!GGC2rVgc+FrX%-4bc*Bz^s`i6mYndNKy_p% zEGG?b?#^%x;=<>Q^JryQ2J8@>twnEw)?{;af4r0Hg{WRgLXf8*JJB?!h9{EPb84P+ zU@&-4s0}y=1qw%CT#pP7)H$4Hhv{$_SKC?koa2e*Q*!vFC+S{dB#0W=X_}bC3>79W zvqv!=b3{jOa=XKb-I^XwSQDMVoaNP6KL~fg5s{nRtFHCw z4}{r1qIqmY1IF1@^d=bu@8K&!9L;m~j8FtI>rJ3Kax&0iL0zrqW0INpDX)83j-|lc zStuoogoO_z9(mq0<4)&+Cv+I(hyR7aScl~GG1P(YuoG4275oFtS!f6pqe|%M5;-kX0pZ~otYZijhRg*02`90N zb?LZYn~f?Si~&f4z~oUiwvJR#G0lt8WQS^CAT^)T#z;r4LUi_}4|;>hJUsS7sqlG>mfVvd>G9CZY- z!$fRr9g&+D>g0XUou~qNnRW5}^T<%R{;5E;QlQSv^RvAGam;iqIVqvU(4ByH@-Bdy zg`=BWisl5ZO3X-35SqYs3et&n)#xfYL0+q$0$&#A?y;x!`(kY?DTBH-%31}#ja$htq0_DJXSXfF2I0u!AT);cppf&j- zHTVpX!T>t3oWYV4lqOg9H*@+uK!X$tQ(sa`k&oE{$X z@=%Q#w!U8|=WaO{%}EF91SDyG4qfX`EJ0BdoU=`XcI0iI>JQY3FN|!r>@V~;h)qC1 zF~6t^ct#Cwrm9pg3m-go+TK)PaUNUBL-Aj`U8~cdjeO zG;kdrUQ{@g7#Ba)dG2udFh>$YY;sME{1>TWphF0;g|RNT>V%V5&1JE{b-10RewQ}) zr~nahCoZYy^)3cF56b$m3d>FE4{Hg1!*Vkch>ypV#4eDWC*`(F1rLDPa06BaNCcCC z+PqP6&m%NBFs3Gak^iCif8AhWr|Wzljp<~2(MS{)gaU)!IG7j+CvubNm1xKZhI6^v z#1KPm;&5Uz&yx+fqdK&Gte6R~CcH?d@)q`C_2d`-sots0)6V2V95Li3Yhz!p z%|)mV;ltoIZT5LnogH#UeZmo#(R%0Soadz|PPnJ2XMeg2(*fn6KS68qhRlcBp&CvU zDliF%;N5YOdw^l4Io->7T!$E9mYhI$G>XfhDn)QYIu}$ZupV_7>wta=*Fnc3tEtWc z)uB8xIF=Z(#W;gi+&->G6XTJ^bZ1%oI6$15W$idAO~~|uJVxX7LU&_~v#}5z*;>iT zqw3wP0-?!{lI=wHpFB*UQ^B^QR%5p;;r&@ zhN21qHn;1eB$>MLL|qF~N3tf>!aEB{Jwvc=}5pgoj6%)CnqOMFDkMmT&|oBUL5Fo{ydsNffT7MY)qy-b-^9voPnCDmg7NTl zSbMBDG1Nh7a;{preF#s?Qi1Y>{Z*L`F~zQwA+PzWUXwOb7So*z1SgBs0m(sY0`18_ zGaXfdHv|)7r*(;rIv#hXCmtl7)rBx)kcbJwIgiyjDR7`Xboy2%-LUS~A6CEBB)k4sK+~Z1z1%uc)kXWlXX`zk8q%B~>HwY)vkMM`ek3f2 zJvy;jU*Bq@Dw`Z!tjBcVIh$)g5)(rmaLyCe#wC4Xb8un@>g-b&6vvVi)Jvv1`b2L` zY+kR!(4F*{PCo6IH8s7O@5;|S=kpqWOy;1T_?zf(yg7atportI0*iT*M0fb&;e;>T zNNR^h5>1Q)Z&J-ZFB32WN`j!nNN4w?2IbXKxgiIEx*!ojk;08!#RHR?9?(I5!VVmi z??ux=a7=X)PYe-CJ}?LABxRvb3mr<)oYdYooXrKgQ<#nwCvYEjriue~BoBkC0(CTU zrgO&!(4bi{!a1$2iO&0~l~7_It4;tht4+xGlJ_l0M-2lVSdNt@GJqtAmvyyPkr9;; z1#Hpe<`&}|L@V4rR1~Je^PgJ49u2&s1`{*X$s667t`Hs`VA3?w;c8_R1E~S$JfxmS z(w!h>JB@R;$+RPOo?LqQ=QaKAn9-uB1^&_IHRB+5Uz+GfP?a211Bi3X$`iQ}T}&JB zjyCU>TrV7cGMtSSkqJ=8dJ{Pr=Wy#)XK)TA$9fa>^3yR#5JTs}GFHF^Tqj+C8v=+~ zZo2?M9Cr>d z2G+?(Kvn{}L1FSt;W_NT^mTC#q7%6zGCAP1FByySBo!`}W15=8|10Hp@%KIaeII{6z~2w?H>CNI=6~~6 z_1`ji_*(PRh)90i)}LyAvh*sae9bfeD-erc?u{A((fEz#*L!V|hks}CpgDgR3Zd=q zH~-OF7TRC2p5l4q5SHz4sHowuoXq6E+U>tlD%re-5&(-EU{=|=ybSFmnn!-Z4R5H@ z%cCSQfY1oNtR~^X-r=qQ5u8Ao0@AS3DiUx+;SY7p{f>FXcu{c8-OdlW(CuM;~ zaQRX3ejM06PFI486%jN#~AtY(>L;Jb5s`uH8t4W^8 zNPcQJOoEU@ea-W-ywoQSp(zgbHK|! ztxCp_2}PB=Oe11KMFN}vMATWg4{J86wauauZh&SEn@hZ_>c!Wji-)@cUjQTG21GzV zLX<0{Bo25LGjfr)hbgwz;UXvD{-+^t)^UTyBrpS%B4!UHEkT7+q#^zP(qtI z-B?#f50`7H-Fg!BqbV_505uRk%jm&!67}6OT--u69=)7xK6R7{OUP+4Tv8J7$XzAg z6{-^ThnB>1eM}p)dB~y?*%5cZB>)ePr8}Y$^}rys*)_a*Dm5f0aD`VL-fFK*FAkUJ zgga{bd3>#vgU&af_k~Qn3BRdbQIVKFKr-T@5+p!yt8>GHA0R$m{vZc%0}NtDme*kp z1iCVQ$P`4kBCypwR77!rMil(Ot7Bkr68BOAB@7-6+_C>)0Jfr_+>5=cZ3J@DL6$b%*@c(9m+ zf6mAT-T-8PPVkMrB$^+rB{6saNx&OOVq)}AKgVH9NMJIBJvho0)WHF-3VHxLyixxt zbsXzYTl*Cq2x$QV3xpFe2E-$<2q*+MkPLwLXoQ1Z!5D~p#r09eOcRMhAIu#tZ5QUD z1c_x8=&)c^O=Y6F(3T)8QSIhB;x<*#jjS|`;Cq+ah7X{%9(&LbbRGymKocwlIcV4Y zs#;P4$=GV}P$FJ!86}FLL3tTJaPW<)5wGA5R+OmQf)a=Xr>_dr2W}msn%CMX-Weqz zL8vQOgvOXX6hR4}bF{=9i$^yfjOwH^;RZUonK@dauej}6X99UR*G_6l2@k8Io6AeY zD{jHgIG;~FSI>9sGzZ1v$$zxcnWW3`0pxJ23`I|(o{MKPxwptkzz`XZa0FQjXY%MI zGJ)}dAkxRh%LHPp4Bc>75QnE^BM_E6cWXn;E8<&OPx6A=FQ!lZVFM5Yq#?chB|r$i zyS7e1hO;H$l_e$bsmq!YZot(IHOXhSZbb0dfzx4l)<(Us=xSx|oqfwgZ-?*{P^sp*~yyD8&FA9-e2|#6SKG@-jYD9wp z;Q%d|KENHGOV6v$FWa0kb`;+hED z$>1;h1t;{;z!abcoq?{44p`|G(j`ke+b%s#sY4;SLB)GPZ>et7L*e$iBe> zlKTdf6lGm?RR{VHs01gpvz6=^5N_BukW3~ph|HN1#mLiU6KXy`&^VFFzJZ#_L{Ps%NJvmodn!~v;fmr!nd=$#>{hYQp|WIk8j}uru%HC| zkP%*v<7d{>j5M-v&bl}d;DlUeTSQ{~@O~%c72E?7p&35ahS*nxy*gLtghtHJN;)(` zE?q&1;RE2of|5cX;1^s8d%5Os&L|e;S*`~b5Tt6cOiNXO7Az`>p2Pq`Z$Y+sB4F{` znT+MjyTe{>RP(`V+f*xWIf)8!tzZ{039Cu~6CM7*@itb#0VxS6q5z1x!;q33aOkTT z4$1)#!Nc>|HsIB}V~f0m)!+KQXU8`0*ZN1Q6io@=KUzr%YLe-7p&kIirN@~_3?GtQ z1QiL;VXpe-S5IgGY{C5D*1-|4mKuR@5LQ=61m8PgfM zcsNzNQH{K>y5YlT;~F$3MNg7suC}m*6*#S^11Pu?kC*htz#`r%Aw(bz z>q%l9OdkkRg|LKw;`nBl6PGMk3+`}-wtAs2K|Hdq#Je(nVDG8-p{}5W{g)9T89n>} zeJ$~>o~$!!R=5H35)i^+CpO_$Y$?f$)rWXk+&@&b=z;643>`fQaDsEKXh^In0X*|hCA~Z*mucy}M;}U}dBX>!Bm~6b#}g{J1Zs1$iVN5S5G3KQ z@=k{=0s$#(Fn72|V-TWn=yl)&_a>PhQo&V3o1KL{fGaq5RXmmqt=Q82WJE2|OIChPSLP$$OFof93jGTtB%v>m>7tOwtQ@Ky#uxm;&DLxf*~7 zZp76k)B!PxLtSMUjN#hJ4O){6BqizZ!3Z_G^Z@}3YowNu03BAUwMqqF?y|{v5^k_s z&Vo980Oo+Mgqv?1UNMenQ748vOxH5I^&~7;IdKVr z#()pKh*$9?02x4s6>1e=2)M(|j)GOE;v0zB!(usb1ZuM)b+s)g>B0vhTy31vBlVqxbA2?(?^Z_Zz$2CX2+}^KY zt`L%(Xg?__Ox~-lR!qYA8)M`rc^lLyMNGmMw_cukuBl@iCGn`MH4hRh-}xH;PNQ4) zx57GxpuG4d7>5)VgVh!P3vIo=t5Ft@?<_5LLq!U#)c*k1-+*5HeYXDxlw$}qWJvRm z_#4vHY#!2AWF}<+`5Edz$KNj$+pj}8q^VHm_IRoM8h`&M8QoR?6KgBlEbV{T{6X`d z+@szS^+6g}4Xxsexw1ewG&V0_ z#=@b^O)?p7$a=e45m|6_b-lqDYlaGII98T??^Sm}8xE93^ehW2cs5ZNY74G$-8qm` zpkm?JiV;SEa^hJv_NaJ%Xmb&^0me8uRLMX1Zkut3vngnUC|FR96SBcF&J69ajr==5 zjJq0-_cfOgE=`76g>1}pqV{;2Pb_dkdmit4N!sUXDSv*}^MM)Hsdj^kn_^pLCB>qi zvSLZhoSCU?G{soc*W9J{Ju%*^&3YAuY;dnAi9EI%e1HbkyCv@1v*8 zsMxLIMQbYdsrrJ7ybfQ0HV)O!w+h-YtFsI9Aq@>SkpHyhGEhv8V!s zlR1qxAR163zE@N$PXZ&9x!b~uox_wS-l&8B`C$$6ii|}{u*}Mb_Z$~1DhqX?(Y#U5LBG(c>M>4x*P7rY_onOf4n zB$~3oAI(Of{^m;F;KzL%rr3 zd`*)t_(KN75|3I>0pZ~Ejgh;i^%Psx1aQa^=)w7`;+dYZf)lSMR){are$*;G7sPDlj1)y-nI=un&XLVx zlMBl#t{YjCv?pwqM&2S<1Qx0rZg2pmwZ}<5xI!6Sgi8?f3c&=BgFA?d^(r1V)j(D8 zKn7~6O{s3}2`kvQ&f`&p6@0yDoi%_7M@e*I3IQ#7rN9loVhm2^aX90SY4h>O=A^TD zoT!t*Hr`boqG7gy?jp0Rgi|1&nBnvt(;POd_RY#tJ#Ym4A!8DNT&2d`Sil?c24l3s ziZ)mlODZLk2j}jnX1UxU9XuPWfNyXXtKbCAhOg+3cLkJq#?i4Jl-<#?HpRnWWBVwn zH#F|)QKBL2xgOh)6-foGBp=P>1gi03HMD5sh~s1(svWE)7g>eT2GBz@yiZ~j)y|{| z9*p$A8w z3Iq}`6{8Kniu~^yEzkntXr&dI4~(@&E?|xr%r-WvRf1(jNCDA!OvWwMujneE8c)Ww zAFb2q=DBXHEbbxIoo{2#&i-l)hes(1K|Az002|3VU>z$`C%Dyyj=BP-VPVC+)ieH&)-)c*8?iwSK^&@Y*9NSyvmFH0ct$Od#s2>D zl@)wPabot@oaH04sVry%Y;nAx4Jd~?h?r$H2>Va9GqG}f3@9@@F|hy|MjM~2r=SfB zD>(eJU=IdfEm*qGmEu> z*x7$tr@thN_2C_3&7LvRNI)+LiUrI-QQ>e| zcchndI+d@-Hc(YO6ptNaq`c>#bLcF7^-^a5WSDKBrT}apvB>9CXM76kUZzM1=9SdQCP?s@Bt0uvZK%K9m*l1ZoPCjn6Y%8!9UwAsUIBoWSFT zu~Je1G|V>8Sj6S}vCVZQO?wQrM7Hq2*k+Zr7BGz^8GzP;+eaM?=74Z;Ur_IonTU*A-0Rk2-#xrW{qwxP}5v5J_*L73*trXb-Q^|KjdAf|w6SXWW) z$20_NqW0wz%8&3_kB86zI=CL5Pd1Pv>~xNGxCKN5O~scPUD$?o6_@I(|K%z;T(yB| zT%9H)1IEFlbIH=44|20ipo-O|9gq#6#^MZ+!+B(b`)~TpH6C{c4>(3EtN^EQ|E=Ru zQ&?EBRR;J*-cn^)0~!j_vcoeHG^_1~N4zNapo~{l1$=O&taA`ii|=h!VUdAQ4a66! zpY4Xqk^!jkaUH5QhytErv;oCHaWPZt^hO)VDWDoxsNKF6jBkppqL2-!#*J~gb$l|k za}ktbu?nEZvUUO>17e8PGC(%0s~}t!2cZfm29k;m@qSR7hf}xUg1fI;dmRf4A;o!Y z1B$|TlQykA>f9&2?l z+PG|j)D)LEQ+vC+SnFj)nj8--f+IRuK0#`WYYN(s8+d~ohzh92E!uLC)Mk;2B`S)r zVx{W9ihH^#+Ijwy`Jqml_6;($FHl7fX&|z&=pwyvjVI#Ug&W8%)Qva>RKxRf&E0{b z!rF@0(qG@eXaju(drt+tLp=x%?wu%vVYFdo1;B#`X%!!PlyzxkNiK9yED&QTlBx+XbC?xt^~zL*et zaOap9w!xjl>I#kiV4^4ofFskh^Hjax^a4!H$)5mn9Pm zjX2Q0sOzRlLLThFG;hfU#G%gRUAV#hL)L`M%B%nmRo3@Xw5zo-M#K}F%sXV;HmMUV z%OFHn7Np?-3muwj*5o3M0CoU2_GXeoH(pfB(uz-==7Z-!Sw3-`EUPQnEv6Pw4h}&T zgvLTr@vb9h>CHHUWiH~1ShyFPaKJUbROjFq(g{$;Rg;y#V@_S+pR3CJv~Hd(IRyZP z-B&3%;MkgR9&W1>oXj?UD^hM@B7~ zk`(QnyfHyL)N^Mxh$~3%!JT7@VrFGX@J8xAp0P>2MOm>`^~fvYRmcXa2@r_mWC1z$ z$_vQ_q(fd8MH`WNsQakA-i#~HBK+F=TL|Gau~F_0_3IH&_uE|Qw95n`hFE0r%|Hp& zhcto^{2KosG~Z6;2TUSl{%-!hm%s1lFB*%#?;4SVe$)tpi^kCAH?5%P#&`N9*u&2@ zKV#n^jd(=fM&;L7~k06+Xc*#BSm&9<!7T2l;fIz>9kt@~Lji;KkWM z7T^(_JQh}<#o%(39VER8kKo)X`NTmL^&?(Id?JT< zl3|+G)@P`grQ%8wzdL^it8i-PHCNS@eS!+tsCv7DJaHLPqt#g4mJ!SQ2Bj3w6s*4= za}=iaMPjj5&g(J)+OR>jhl;`ifKxbx2E!CkO+4ABSWi3TwlkxQAf8TrUpJ+A-Vt2| zsDdvR@vy>z#|yO%t2i1vvIrCq3G4K3Uov)_PS+W2&ZZ87_&7BlR-JGh1%}>eR-q68 ziM;P+ssJehBx2*(tKCQ?mK!$Q;IE(X2NMZIGZze9zWhUQrJCQm;xFRe?mFERtdxlG7iQNae`6sSWsg?9a9Ur zMf%=#x{e-(IO{M^>Eef9Bb0IFtKmg+QAmV(p%FZiWo7=-Y!F*;8&rX~qF@NFg)&@k z*+rcdV#TFU1;U42BZL!x4bX*^7r_vBkC5_0L+>4-4C8f@`%@)))3yr&JZ*JGk9fi( zRDn_OHNFmiHWfI8m&S;Pf47AetoffFQGzzTF`{{WL<6?SJi!k~)a)hgIIb2nqJE}% zBO7=^K!YU~1adm(m`=zvkY7|kZ3~6~KENi}(^+*d7-H_orl+w0z7`09&>}OSo-l*} zJ1i*~#bFldTj?z0sozyHimOFXr2Up=bTt+*2NMWOEFQ@ez>CN!o^Wc9WcA2=?7{jr zNHb)Eu5ht*?5nsSh=4NyAYN4u>Iz~$rN-Pk3fRNx65T0&T>jK+fd#Ze z#?Q3*l9VTD@}N9g8VSfmp%8OMDO(3DB2xex02crW2*mtqr9@dPK0>gwNefO259X!U${y@fpTkKm3A^~fD#Z-5*&RhPK{~^^2C#o3b;f**#`6kC8fAQ#7F5M zu?7eN`atRq_G64)4gssU#ySg5*CMe%cVP&DN+WZ#ijwMW7FOJ>1_7VaiP(Z~p(<8% zQg*-{021uEl2ly2#tvG% zURBWyaT9ior)q~YT;H$IPS;jn1Q@rJ_)c+xKP*aT0L1d@NkpeRRllnmNT=~wC+?Gm zTVjFuLiIH;^o{BeT%EfFiVk zK$Q4S3kO6v3WwnPRr;3>D3M1#7R(1Ak@{{HY{y7Hfm~u^3Gifz#fDze4wjn+8bb)4 zYBUZ!Q78n9m@)t^G#lCh6b_#|`3B00XJvJSr{~g-1cMc&65t7Cg+T;NLSxZf-d;szOt!eZH&^K*7AjeCHEDMW-8nIr0od+U@uIge=`93%Ng`X5on7=nGM`c9|y zVE@I#(Ve;!;*&8-<^h60X`v~)IXjM(;7+fr>!6CmDxehdd`lak1q9-qSd1Y66zV;z zO{=fqiZ?i+IPwU%Ljpa?AK-AAme#LO(GBl}tl}Cc?~oSApIR?63w@8jr|i3c>zUeOr8jC*%ivh~y%lfLlQk zSM0aWLe`@W>V&@HRSiaDAtNlpSfUR5)VVl59@~60w)xN^5$MBdIlZT%r?9C0JgkgU z{HK;dq-QpXhgqt1K8$Ofn|$^-#$Txd`qfP+E(0W@Di?^K1U0yAT!Yj?UFaxGAy$o( zu41KAo##DN-se0W3H21~`V4z$ToXY@_1!XVP{NLv$0@247zK0@7Yi&9R}ke%2E-Jw z2rhi%&I|BVCw$YvoDRz8u!^G@$2qJ@fOYwxu8Yk{y5P{I5&N!`r z2(^tNfD;6H;$$7K*iM#M@C0pQkuflcYwB`52cW7q*EZatTR<^&!be|2IQ)i%|E1dnSADL61*s9~2{FVuYEd#b-lgl2t7mRD4~ zmcDl!;;E;|Kwn`FkC&)&RMAR`ewcG@Y;P$J6Z*SU^;7+W% zv$T%@<2-!@dJMD_=q6T8kc0wOVGsd+SXv|&ncg6xz7r9f9+(h;#l{H@>|wp$>HfT{ zoO(KoI)d-O>Lmu$j(8bDz$j2x5ap@5btM)bOlUw1uTS_oDLYz)1y{HU%G6;DacY8c zi)TJm7M#7cWr4*fY88D2%;8Hlr)fQXMi$i(S#aSi*~B#qLE;~q+VDekg1!(EhGpqT zCpG+@pFm3wP83zR-Dx_253SB3@4i@5E$`(MM{vO!Lf(Zm9W97}nP>n)3l2dQ7Fn1# zAgBnU08VfbjALduh=4Dtg$4o20B_<3tOC6Shn)F?BRnCv$RNJlO>91~-hx}RtcWYX z5Y}19<+yCnhK~x1XoEZfB=`=}PV||o7bg){O;X4wIIN1WKIWCu(T>B&r@ML>56e=#yJ8K7W3wB>D+<;TbA~x&X2m|<)|80|%P2+Ne0nR8Mk;Sn(MsMdJPl@^j zjNs0!0yPEjBFG}2wj1TiG7HE=dIqa32;y|Lp@cfoTNp(kx=_<3f=3v&0#?f0lSL0m zBu;pzWp!Gh12lpKR2AqzpcCqf$3FL96T0eDsr$Qp) zcrJZ2io`<37DE6i3WpdR;t2v_g@wGA6nzDOonRASiOgFB7J#mroC5~2D!n8Z=jf}R zzz7X#IRuIo86I$k3W712Lm-hLFUK}@?W(Cf|}>a6cF)>ny*>Oc$|oE<_6k+*NNeNN<}TI9 z*0Cm*4O5%-s*&^~bMwt@YV&YfPT0YD>r@`;CRxYMbUy9GF0t~wTO(buL0b%)e`XviUBDx{@FybAAuoA2NpdL0g($s4FGdh!A8* z^N;EKargg(OXWfTH9*Xe=9er4`9)iQwfPlqTL|-;7J}%V0%5pR4u!Ue#0+VEkH6pd zfIp=CBiH_v^3VDEzZ+>l{>nBD7k{~Is8Vr&T^!_UR?8W#NYxoOZmfwl=F5mmB>zkU z7%p~0n*^T%mq2)6D=Um%P=PG1uKYKuiVDOGrY8m2IJ8-(4l@{tO(sSU!vCd;?T&ZF z|Kre_WkViaEy&Xu1bnd+geR(@(t~6o=nFy-R={I`enDQ~EpH7KdO;wvWSCo&qXa;2BEQEqw|`g?3||lVB`y*sAOMBm|ik*Xv5C zE6oFdDQb{~>Ri+lgQ#Dd>S3JNQ@nle>A2$wD#&n0ds&g%r zC(OkNX0aM*Le!b`8bt~s!@l8CeE?q9$^jfBkt--bFAV8I3xBbJxDy( z6b5sTGi%%_GXbyC$2v}7Fb@<4voT%hL7+1xTk!j=+7Z=ZOq|3j%wh7Li`8DL zVz~;)%N^R@siH8LHLB|cuwh|(MDvOX4q#=I6KwPXT>)jbb|?%g5lBtJFqz>QwO=So zkmpAu@( zHc*zCBb#ZW2{VEe%wVo4S`fM1>=fw$9Z-zgu$OC8LlB}SkD#?;CCKe+fnJtqOLC3n zwU;YgfiMU^Krd_5VIhbnxj$}ZFq@qy-4F)BNZw?tD$k9S5Cjgx?n}q+sxOI`A&jbk z7}hdW9IzaOXQ&K##|hF8sew?0+lLB6nB#FUZ$bI-u9|?E0%0;gF`7UZfD^(~A@(qZ z0Vi?pS{fp!O9T}zQ^B{NQOcvP8u-OhkiuYKGVI87aaXnCgK$_TFSlz8enAnEH)VIK ziU0)qvbwdtj-+R#YYi?tw+Wyljn3$jB^Ye6zS-~|Z@kMMP71RzE* z5E^*^US3hH7v>5qBRlj34T@@z79*JVMm6uqf(!)4li5*)un4ZAAQ-+Kjy^xd#$}_M zOC1A?-B(Ej2cB6Bq7bu~`J-#%bWMCiFUXapAO*m{Se6b>v9VmEyF!q)g}_(|qL~QQ zWCBB|rs>8Rdq+1Q7D8ST?Me=<7KD5orZ51R{Ntc5ySo%7Rv-xg27!p0uZ$L=Q|+@F z!wT2}kwFu}A($?dAiXpj02z5hVE{1ir6I$Is-gq=q?!nsCHq&kjj-c?Kn$`#P{Irb z9K+R51wY<3dbz#iO_zl$Uw^YKy=Xqfh0mujoW1H_A1A)W4=C3Kk*XjpJNgA+Hl+&% z$hLmPlFP&#eW^lSc6TX^x(#8t==C>1oJP`c0>sD-`tn$6;FoQw zaiSWzJgFx6HBg1*{n<-KE)W?meFIX3q~jG;(1Wo1VnP4{eK}J5!2%Y1z+K*v%~B9{ zXD7u57>0vypy}q=IG6F4kCFZZ7{l|Q3ie|*iDLyQvK9mo(_=8#7Y4&l92Dhh^Oy#x zvPi?1r~tey*LGzlyvMPwxDckfHXC3R5w7k}1L(48Oap&G5mNVxwp-PNz90{Y`IJLi z?NSpE1HE_hjr2iUUXTqW^HTg@)do?B`rmZ!^uuZt2E&ptQW_Zwf|1+o$qEU>ubAgg z5ETKdd^ScXhTWKXE_J32fDHSsX4=U6r#z3r+&;FsZESO^^RI(qxc#a?FT(v-1y{gq zG8$b5dJq;TEdE$+{(?-Tz5z0jHEITy zBk-jagJ@=JL0CUXcaega!T?~VYne{3^C%4BkElJaccygYAM@pTO?A(plvaVjWYQu~ z(zHp62L%^_q&!-o4d3770%_UkkXL3f_fM>;)9ZwroMkOP^7gVONjh?<4KkO9P!5KVGsV)Nd_q}fmt_JS@XpM`y0 zs{kDizqH7%fha^S5Fu!a0nE*lk~lrsWv=??tGEb&(MSXz#I;&Fsc8X>%y65$^|O;C z2QgWB!~zp;A8LbJ9-1VLN>PJ=$TC1BNjivT1#a0YE77j_=GMua4nL^g1~6eU8UCVr zK6lRZ9%(r`sUZ^w4}dC;)S>c+yqrk8Re>bbRb~UZKw#K?b{Iw&*NiB#S3Y1p=SZ2)GdP5n~uNiG8IF80F5AIlWbaaQLZr-Q?!p z$u-Re>wmJfN)U~<5M+;8jsXm?g-BOuOVs(KfsAT{0Su4Nafry`hMLSANCHqn*@1?H z`^Mx>@^t9Sv5et+n=uWKGcug6Ryd5_r`3W$UZQl#2XLYdhq+RlTpQXT58)X|#nlda zC7Y!ns7LtbTeKju-jo4F2?A(=%M=E4hgCHknQ<{{fxbA*6+3N;5KVzF?7r#*vDLi5 zmq$}0Yx-8zh;*fno!J0o;4w1z;f5b|v%37vjlRtP&&W9<<@hFN=+-%=oiLR@y}q$* zl{3RyfWO1$@0uYDAtlBSH{a8Iw_U!E@`suqbbSbN4-FPS_|andLzepgCH$ccCiM%= zKc(+y`TKeM{0b~VNxn7m*ZBJvuKjxpIewG+zv1uS^7mV|{|@DUG(wR7AK3O+po2f5 z_GfPWCFOs0jb(eN!CzDV8~y+XGYdn|P|gCalHcnr7fYQT<0={EX6+nR2Z#Aki8roS z6~4f;eEJA3#gkO(OS0ikWvoyULKGc&pIUCMx($c|*OZ}+8A5s=lZm)oY5@tr6g)Q# zZJyBfsh9y6T$fWnT%t)q4p4)<7$et=p$aEOBq=A$sPB7J-60Cq^tKno-y7Pzo1rsE zC+*A_kOM=6PwJFkq%ys)We5*cPH;sLa_|tKCGx9O%&m*(tDJUwr8OP5^mP~lU%QrVAXxaiMKm~WJ>)t-W1sU(}3q+`n&sxFJWeB_a6a;HWUlMi8?+FckD&wEY zW{)=Df|pCG3U{^Kf+-A!2-Ooz@QM1s1T&o`oy8BeXN-uBLw5lBL28s^`he7pizq@U{S04w`fu?DVQ zNJ1APKmVrbewh)1J|hZ^Ph~@< zL4YW<8`CW4$j86J`VLNSEsDb#WJSMWhM+o{4md)5uS?}dZSJsE!y*nu9bg!z>EL2n zoe_>`RP-A}n93Bu1fD}nmTs9)8$2|+Mw9wrv{G0=3|fM)EhAqa-4Glq^nj>RJjAQ8 zkVCV;44?-{Jk%h77AJb@oW!ZX4?qVfI`TRA`ZHL@(MFR3B5(_iW7gqWm%pZ_uH$BcSo91%?yE~QFbT+q7BFaSu?o*mw;0FSm1-D8Owp$ z-`tTpB8|0!vvhCh4@3aPXy60cIG9u+2%BZ<0R#jc+&tpNf;!nP4mc@Bput{sKp{B! zRrDAFcajW&8C;;^FhV$<{!5Jq-s?{|DT_ePs;6ZLe9w<-;K5gEKmoNReu)Z>Q*#5f z97V>#-B=x#aljzheepxB0WVl&F^Bm<5prY~M#8Zou3Y_6A(#C$7mL~L!k(2A>Np&<#2FS7f|$g!e26I@Cozzom??jF^S(t}4B6(9t(94vE~BgmO= zj)S8~JzHZ)S;%3C5I>$>#|j3(3-%X?z}akZM;y!$j*W?q1AK6#zCYyPZPgu4O1|$q z&o|el44x3R3_de!;jo4JfsjrR#R)_Z3CBG3EU4Yr zt5S3vJ;0EW=q?a%EO*xKSWtABARy*&JSkbN<3Pc&J~M&~9&|)1^*!cDQk&{~WfImh zYN`y>92|e$Zq_$hKVC>4gmFp|fpEhJf!I_pS2sis1_&o>%5F{j&RC_(Fic<%R@Vo{ zHLwHgIJkz5YrbF?LSfF&)6FwV&CWet>*1ydniY~zAc9&~sgDHPH#>;b0<{o&sOJW4 zKn$uAPl`BEkOEKw$K^Q5IhH%XlzOA-P_6sAe_Zl(n;`J@E;I4`QY){H697P`0gV6` zAl!f)M9tBihfCeKAOzS&VF>#($IEppR_|vyllh679^+Vn2$|`498YQkMv!qP3*oBG zFxdee7$STs6S9u;Aws4hY80{!SP(l`#g!_qR>1`@8z6#Os6+n+f>`30`&$Q;mP!< z_gPhmR|RWO6MXPO?R>Q`guKBUG9OX_N{}gw_@9k$zy*Ylf;be2@NW7|6L^YIt7Qm0 z@=ZvZZZib-@C5p=o*-UurD+0(?Sx1<^2S^P<#MeL5}=-n03`eBw{5RZ2&=iXa~%OM$9Y98ysr!kenUtwJvpAkc&h7y{oQ`2ui3tR(LfJ~sMDhNBJPqEw* zj-_d^4^^>_gD_I22=~-3aKd`k0STPJ)e0;?#{o*^n7yH6>>#0U%+q8qfq;?kuS?R;4M^OQrzGHUI}! zaiH&zePcF|f>y?{ZPK8CQdV`ym*`PIiR1xSo3CFQT~r(pATEiSjtEi*N-(K7vIxA0 zln+*Ou;Bmpqz1;Iu1g)D>VrwmDYaV>2P{F|U<3#Pa*j*`GCN>@B{2+u!`ez*(~E|5dvD9!VnO1WL}4pn(L(9^^GFgAV&rufn%?e zD5EFi;Qla0Suq?=3Xo730$L7DQV;@wVAGTW5@ZG)pypub#p{u5INqi-TU57-1Duf0 zL1GMxI3Nj}#<3De3MmKIo-|QxAmDg84dPBA2Fch{Qxrw&h?>V@J2|B}uG%}*g^L~7 zW{UD?XpBW19Dq}5ri^J*n{(>=st(|Rir+8ulli~hXhC6Yk76hbhOUu1NWY;+F}{Ti z8ABi*`9S=_{@a^xbK@tP?_~S;`1>a$^ZsE7#`jbILH7-5e#}X~{~@hb3Gw5k#mF=& zUm1$z;ryH!zeLABv(v9p{$BGRz!twj?Q8tioEX6vH6E3w`oEe#GRFAN)D@R%2-z_H zoKhHLNKrxn42UR&r~xVg(ST%3*Rnh~Lq0smm82M4&tyUZF*qERd`vMG8fX-ZVZKo? z2Haw0$@h&iBD0>SgaB~x{h=iMCMH#!&^aK00A}!YLWM!bwvH6y@pvM6cy6fTPeC_; z7$qK6<|tYSV+?B{Vm{d?QUK84>8h_eWj#cZLZE>`CBc!D$$3s2+R6A0!T2y8#u%Ta zKF7&0ruVfVW45zlT;A7QrbYbrb$taKGF_uS)DWsKEJ6r)hMKo&v&;!Hmc%0KN>#V? zHIRwbs@|;vc(GPnWDx7M)eFkO^{i+iWZ3Nd;OX3^&f|_S^^5~k@hDRAV#wh|(~G@w z+NXl+TQ)plnC-l2XmPlZj6>->T7B{!@1zNnm_AJ0;zJXSv#k@z0`bFVGJK)p%eISe zjD`>35Xc3gs6ZMVek!;dWCOQYpc)A>IR0V-Zon`IO_h&OK*kcayBq`Y1JGi%%!Hu= zXYfU=9b+xTMztRsrXW-gs|w1qJ0n0Fn zI6)vW2d1hrh=b}lT%Gw}aWe1>Jt^~P6=))4I;#!(2T%r2aVne>gKHQVC@xny{?tsZ z$-_Vj$KY#(3|Fc!ra<;^gW&~I2^0}|JC&9~sIsg;3>XKGA#nj&5R{5%I2CuFpB00{ z%~?lTkY6@JYJ}HI&hK5rlNSSB1UqWDl3+kCc3Kp{y&-egkFeW8snkk5DuPe}NgR(# zMsyIbbO%@o5u~B+H`Qm3!Q;e;#u#Io6%HRc9R_rRhvPZ{XwQ8QFPKI*B z2yqS$u@RC-aJG&p1cMM-1g4T>eW8(1^`>l=7-_&TP+e3HZP7mvn2H@3bBG1esv^;d z=Y8qxQjD#IVgNZf`P0ur04wh!8gq;%Vf?Ts!q%=jso^SwUuz8@gaM#H%Blm*iGR2D%8I$VQ4`9LnfVEP6QU zoESh4p66oc98TrK!Fe%CNGjftJy~7nIY9>NB{dF}LB{1;vDXX!p^dc=TtY@EWkrC+ z*UgNED-K`BtFw8PGIN|qw>Cxm{MmNNvdRPV&5wZ}RN*nIDL=96NRRjm1ie2d{ z9E12&y?|5)M|U^|=z|4-(G3(NGe!OY)8GPFZRj6>7$?*0Dj`T~fxv>ORNO&SAgf?U z#t%|)dA~wXkyIR-!TwW`7b!ASAu3h1oEMJ@y#aa#&_rYqw^m08M;BzQE+E4ZsW^Y- zhCm{dKGWYk-7g9RtJu;XlJSr_+mKX78S;k4aQ9GAP{yu03*2Il>cpZl$B=iy7$A&S z<951VG6;hVOCAV5^-jN7NEc<)f9fawNsD2Q@u4OFW~lRv{zxHIhfiESAbc@HYxJ|S zP>(1=eODKbVJU9tc9o)1At*IghuVL00Pv($(xBcI?uP$Vt_Q{(`q5OaX1-97i92o zS5kgIRm2cGHOw4?Gg@`vhUQ@zMHSQzFpJlWG`b)|4sXcekP3(fFeAhGhn9Tbr^htN zEM)Bo96lV=d=S$)(+o~uHNS|h^TmCIA@o(_H3M-{u(XM5`k- z7VQIS37(%-EU6;{D$qWdV<3v)*mI;R4JlFxRlyiwi>M$Ts)N~`wF*<=vR9IQYrujD zl6kOp%x~~nq(3lL`7~e_&&lz56$TmBLdgHM%=Csf@Pa!W=n2>WdmyOvTQZ|~Fv);l zv|0$BWz_ePgH>rFo}8Tx10e)>BNpx-T9?=B5>+lsYu>o?^I~x87^m1&@?0@a5(tYS zARMxQEtWVI6=IIewyajvgmHj3(y?t^gSLUp-+)LJTgEB<Bi(h8;JqK?MQSiF++! z87M0_t5rZXVt;#_l3gHvc%hr{n(>S#1CJ=hSUSws2>d#1e~O{pb!We=E%@Sqq^P72Zy7As(^u1kR5}c0rwJP zWP+lD05w1~Kp4=A)dgh8;p=e>qz`Rcj7^%DT{S*=F?Ko@l{rTJknjwiZ&d77Q7A@0 z!f8VZ6c7gr$bgJ!9J+@HB6?Z~Vp6Gt7*(0qS_t->*@jGCI3`u$7zCn%dc+fYG2MZy z((EcBx)cMxQ80%5Sa4%$k+o=o8UYSaDLgu%+2o`b5k3Gf2uQV9gA6k=Ip08JS*-$G zBqI`t1f)U;abHaFePmF|Z-~V%OCiucJW)bYSqo7o<^otp^Sgftg_RJ<9>5mpD8e#Y z=Yw&+VWK#~brXdY5GN20?h1p5nG+RW>YRgAb*M(hUyNmNLTg5|jCcWJ_$f2fG4L=eUpU=6u^tWA+Zux!l_;veU?@($6p$v|O^6JVfexY4)*CK84L z)8G!JBCiFi7MO8E%tWCAYZRElJw#Si5X7efYt(T-4yZ<2jz`5EByGeINFX2^1!b@Y ztE1dmihsq5i0B{)P*tbgJt=Akn1)PywSiv{i^?cNwwKdI!fS{FP=jNtn-;^ds0=co z7bhnr9F@kIV|3*Z&iVc2B+(0y2B&o0? zvFIUWgp_Clxo|A1XVpYFkxxh{D!>N&F@``4GGp*N=E=<)F@|ZxpXa^F4H2jS7zC}V zHme`rSNnq)i7NG_bA@+>5IpWpk^TX-1&=%`^g;vy)KTrqY(N>Dk7gI$a8!vwg$x3$ zQQx8K30l}~q0tlW_z>6nU>uDj5 zj@8QIK%j&8WECAsjS_<(awzd%AAJZ0aknhhl|FrpO*D~^#kwN@oX`k^g|5;jR@f;}t3+#VM z5T}1duLKb_vxS5ZzfJph`TITohBW_)zdvjK6rvE4AlqN?$00b>ft6H6bpSp18*1dY zkl{Mxf-nSYB4k7h;kZhw!yZ5iEDFV+^FS4%B%zOhACS|+iU_&#*j_>^ts1I$Nc+s=#_ib&DnP;K%@S=^7<}Yo@bF|M#9irU=cTgA5(%(^ z+&~Qvss>ERs2zQR3Ean2Y>#!PHv9S_hj?0zXH`7s*h=-yv?X@YaR*L1(kB7Lp%PN* zpuFqr?M_6cvsOQxQumn>QYmhq_9>Rq$8{WXhX92hMu0r9_f%Y}f}_rg39ch)LKdJ| zDnJQciohOpASKHoKoEI9qz_9~U#?=+u%;7IiB-xsMRIo9X}DrmJ!^@>_KOQ5 z3PrFU;_2ZHz@g64l|vXJz!TJ0Ai}YdTN{FKNF7J&Na83NBb4{$ zp$Jd~^{gLpK1aAq9bg29RDvaBF20A4Xf~?#u*DIwLJ*Kdq#vrF3akK1V2rSDMDkkf zu_l5qLh*Pmn<9n)EWip5kC1fZ^-fj`Q-u1?;LDNCagDpxYyIb(x`GHwA2^s2M4@`Z z4?a=rv(^N|02BZjfCn?RE{=R6?pLUSG$O6JslX1d>*dyFNonLDHAHbGfWyc@gykC5 zLIkfP&L_sdSNRE$1Sh!9@(7LGAm>L$mMq(ui~TaP*{qIdM@s%cIHeu=B+!H&NO&eD zo~u$p6QSWi1o*+rwbKyc4YkY=j>Mkz=|`;{AXXCC02RbpXSd)fq6i}Dhq=aDhnb_2 z+G0jGsM2&jf9U0yN_-1ad$tN=gaw0RDsit?*9{p2R9Na5O1G-LcvKQw)Hl7ePz2-> zGQkQEK@f(CJBW&PG2frfBcmdR09DlSUyf2(q?b$$o^WREo*;rf=A_z$Q+l=?@Z#W@ zN}RyzDj-p+UnA|MBjsYHyWe2Cx$)d@<)@uvcwkj`0FMihv^ z>8s^&)DlP`W~&NMsQ(fUkI^NXQV~SJ<3}rr_N}99RtrM}6cF$Qu74^_5jYH0U!BQ- z29Bw;esr@g7QF@JpcO>OaJtAL5G=e_qbETS9?uX6g7pycEEoYLgfRjzOIFJvAP8tA z)Z}ZVD(C4TOc73uZjM(c>mfLR9ODVJ!2LsoDZ(_eL#y$*3eW;y!Byx5NkA9D{>wu! z2cIhFBKUUHQ$uilbKE3=fkP@Ggdh}?hA*tcH~>{e->{-ziV1ZB8ej)^^)~>8yj!6N z>(nM1m5iI5G&PkD!7BGl(zTU~Cz2BL(Wq+k#@s;Xu zZH*BQ$9AflT{~1EuD}CAES;$%!HgfN4qM>xQvpn+;9PG$9DvV}c+&ks1fn z7@+|K5M;9eSrn3h948LI1R^W(-;yTLmhzcE4PB04IRtAwVtAL;8G$GwZ(J|}sDayxibp#zAucL`7yuL_1P4?yA$U?o2UL2Yq}PTW>?;_d zj)fgq4S_mBCaWR1{iY=g3zkR9jd|wo*&oj9;ZM`a0M13tAn#z>`UvVl3iQV zqF?|r6pR2afFK->*E{1Hhg3o%QS=ZzJNGcc89BigG{;BUe3H7_@B~8ypn{r#484d- zSIBCLpiV*{0Ro@~h$Z*|m?JC6&i*o47)%jXj!!tHWpZAT=~rn3Nzj;eCJU@Vrpb^0 zYOV>VwP2MW{P2i6w_5~(D1tA*)fub+QOLVP4^ToFB*=io0j|ZjG^fu#IKGJ%;^pcN zQQ$zXtxREv@OEosK_3FaRb)bQ9lz>V^`n9j%mTs(fC=m}BZRIXq6-qP$Z9(nW`cwg zc{ku2t1xN72yQMBmEeBJiDZTzEUM0&v(9!=^bp*WCn&6vAp%;6UPPsW5FAkH!3+i@ z=ncUKXdkwyK_n$>A!G(70I}i%#wZX0J;Zadae*a@`sC*MNe#b(XUY8%1AIj}#CMcl=!Iw%0t*Ty-1CRn&z!=OBfCjfr zk{IHq>J{H^NF_J|&o8wfNPwV%d&MO2gS9cEiMX#i@W5BG24o@A5lm@It?y7}*Cd5i zV)w-gIxs}A9D;SNSOEgy1a7>OL?AR1njb?1?jJHh4vuR3W_rnT!F43{)7o4)S>gwX zLlHw5A`~qIkN`0RR061=sk>r`OS5Qxg*HYA+<#+QIkmaX`2$!-M;*ZGdQTaVf9Zja zDgiyjU6Wgo07F=rS>nnWrsi4|#t59;s_&Yd{MrZ|z(mjj)DMrUW3viS3fDvx0HivR zw!0@cMhVq+UQ!Df!mD)v3WtD&HmQY15pM~&i6~;Q9ztD~LvR&T-zS;IY6uRusmjDK zgS-n?f}nyhNq{WmgE*#=NdhtwqXgLrn1q}KS%d`{v_%sk?+^tZV&o4|=)wdzf<+PXvnFDX`n#G4 zmIh@)7r_@`73d;Z7MP->7AGu%I4Z-ND&AJ1*GX00gBDi<-{4e@9D*DdapMeDwI_*) zm1GrHO>M56+BmDloT(9nFId@6H~VX9v)M_7@=m*^Hcw4$o}AjWi7nE>p3{*1Q=7fozA&|U zzE1JV)aK>X4^C|ksP;yhZ%%EFsCF#PlT({_rZy+i@V{ZKe(Mbn00n$w59~}qB{HPZ zjaL`G9EjgQEnMekn{Vx<$r#dn8}=WE>3k>KzsKKq^Y^{{4MF_zzr%EXnA(q69Fl*< zKcf9({E6%6_0!EyQ2vzbKjZS}DJ$3c8k&(d#MQsDHbkTTHGhBT5Ldt5{Cn!rj%fP_ zCOWF2msm3tWyqgW|8xHSlD{E6q!Xn^59us3uerLUDmT)B?r>pJ0oc*ddD#&73cACW zsiDnHLlfjmz34=ExER_jHsg^cFW`=e4sa)iyK4ouW1@4P3wO;&!j4D;f2Q=c-FU#G?mvG4?< z%JLfFYLQw?YM1~@d-_U(j>o!*G9GPb*;ztdJs#7p0(IDv zGVHF7NBR`c3W~)Iv9H9u(mUz(x~vCP99F@e=xa_CsB=7)_YmEv_HLRV^(9sLhiO7~ zG84KCf>5F0fYAVSkdnx5s)G*1F|N+TI_y6=p$NG~+v_rd-*%{CX$UG2z9gtvoX)N` zWQ_$O5L_-x>D3!PVi^czrxk}3sH0xM4v!AqBpF6Jz#MBs@-HFbHxdnNL(X+GmA~Q) z886lMGSY$20Bq2TyfsYeF$M>@g6wEUi$km_DdG^;j|_2;gb>~8lR9DE9Udz>0jh~W z#83x;hB>Pe$Uhz&-rT3j9vI$itdl;h%BHk7YqM1as*oMAMKDtT6<{FF;Ni{Qbeh<}a$Ytj ziqq@EB^^=yaG^S?Lwa~Xiyf{6&^eh#fX963 zNfpSBT3fZ*uHx|+U?=dEU21@Hh;}6}Ku>`>k%GKBqIpR@ucTWpXGe%>hV-cIAXlt{ zpzM(o;jXL=Q5Q4^eTZs&p-_cDSE?K7paKE@aQRa)U3|kxNBz(o$GGAWC_AJGc4MeB zUu|Mq-PnzBr6HDvr~<`79>QvRp*pgylmW8CE^~0JyH(8#-H6G@6;3+=Z~?+>8QDA} zGkAwnScRbu-;Ny83X;=Jl)oSM^T>+m<6dh*3e!O-!Z!jHMmj9G#1GcP37k6D!2X8S zbp#0LD^84(?gK%{HudgMvCFZtxHwjSBb_~Jp%2m99x2igP!6IHQyrPnh;Ro{aX5Ys za`l$#&>eZeWIlFSE67fPI%m@Z*^z^lA*euLO#mWUW)!NUdQpa49#nyd17ZW-;rvxW zaI6LCG1LLkKx~$q;PiAMx5Yt|6{@2Ost{A1m^p8XG6c**5GpG}9vCgXh#ZJu^;pT1 z@n|gQMc8#EPljb7Pox8~!x=ofQXP)EZjdXEzqlPR7Rs9=8mVL_hPUE_CQ+8jvxJg5W8A;8t!=|d`#A)ogP-~{c+f-b~VM|DFTRmfC< zz5~uQvxq}D%nH=A-+_pK(NWZSA||cn+QaBaz0-h0?m0Qeg)}3H=dUPa010a z{ei~BR0o}iCL`_@CwC{t)tfS$HqSW`ms8omcr*YV$Seo20$CNT^O<^PjA;NmM7rYo zSLuZO0XU!>L!H^N6Wt0WiTZfZN##0i2*kyXvp^)B7h^gEup;&q$K03(oU=N^*_*0Z z8nV8cASw^2j@o0Fsm(S^LLQTCOLf|zinSqJ{HpPU(_Fx5_R0dki6R8j!}(jCxMYke z2uPoHaH5O?b$I%dJN)Lu!gOFfe521CCBzk{rlU`x0ox!8> z*kg+s7*PIPtSgb-+YD zO$d24I0oB!pgfwvSSO$1sj*6s;UHHsJROJC4hgka4e$%(g^*PH)q1;&bx?p1(CXOO zPQG$}mYI1~S{Xtls}G$PqfL`R^71&L9^nR3TY#OIuX7@DLmgBhmj+w}1_62a`WuU! zyAiGcI18;0Dbf&r9TUgJ+ALMEs;XG>Mk*g0r+gUe9o@>>5E;#MT4e|qK#exiVQtqC z2Udd^MaNAK)U+0IoLXiR2VTF-Q4?U#w@wlQ0K?`zfTm#wR5UjHx z3o+EmjAlCQ3MU|k;8+?$VhmIw9Cg-(%+!KOeVOX;C8XL&Ue4Z2YjMqlJ~+nJqLQjy zQ=l#3Kvx0Ixg*1Pe3+~??t9ckOAtr^9v}nwr!^yoxel?e*n0#_s{?!VhFDi9LK5K$ zyi-4I-C7>9FLrPZVX}B`Q~~dK-8vC@f_pfF<8>?>V;yJ?!jO}(ur8;{C*u{{s^vO) zCqtccalC6nLu9JkCJaiKQ9lq2h#TvK65J|+s@m6vxdQHR$ySjUXop>>B61N~0X*D) z?vHl$O|(Q`m^(4FuAosMnV0C%_osvvSzWFs12umfVq7Vv z5~hK|Vx<{Q%XHA8$e(~#H>d{U;Vu%}B1gkg?-Ci7sX#L#gX3GlT|hU$AM>1|3_&Tv z`5Uk8W;l;d?1)1&c-zF9C&SnW*dyzC5w2L!oR~!A)`rN#Su%J+2S@ahWPn2MwhH6A zNlHo%zIoe$$>a~nK_gP+Au_;uDhyJSvxYcLvRyGr0B5G7UU35!n=sXpkD<=xGU?S* zh@=V5xu$kqfOH@>izh`G!r>=3HvroO&hOqPE32XxEWb&KMP>98apaU$0BqY(T-mVTPMC1v{f%CA4 zQ0?eKAX#0gb1q$QoS8)&lD8-kuCATZTr(x&kOc+lz<%Pw!}FAeG#<4Tkw{uRzkM^y z_WjLhFXzjs=O^8!a^;w6nTFC?XgU9z_|uConFk#(NQol;L-V`M-^KW&UcvuvYTwTa zzuXk|N!x$G-;cPa)=zmwUn-3sFSeib_MbPufU=_|t@yR(SDRm^^()0^2uUu6ctu~4 zp0uK`*Y7mHMfuyM6&uUew+wCmr1|6KkBWW9P|{rgmrlT^|3=4OyL0-`D$?*0Jt_=V z^;yQBJybEDGU4C_eWV%JI~8_1S=3L3RdN>ZS+_^C;iY}9iK;o;6GDx6-K7cw5m*Cf zm5TK$?pLu<1CrTvtZEf>DlBTnC@*vwd(MycRAd_a?O$~TjDl7VPO4f?m zS-`%ku4A)|zd-eCV<-#yxAirxNQ2W^oy#2ZDewHUH6p8Ie%Pz^_m?I8wK820?&(2U z^?IgH;tUq}d7_T(ai^|O-_s8C^i*{%EBgETq}9mim--X|D)l$4&p1$IP|0C>8z_lvh^Iq9(_TJ3Xzda|ta@r)#&?HSxn)ak^nqehvrY24Q zNt-Ke(zHo)nlwF`)1;@vNti`Y5l2u|1{Dzy1V-&N5JLnUPQVdWcsaU3=Axry}+S-6V3T|7N@c>>KR29^e_)W(p$S}mXtz%Rpj<1$*mt%YtN|W$(kvssY>Y!1{LgA(hkAOWHG%E}?6(6T0SwLq(*xoY?dcO4KC44O@}~)xo)MTjijB;k7t>|hfaW{g zQ+gH-DlXEB0p-O8;+GNFpSwnh_OvWEF2t$;)uXCFUjc%D*MR7!VEgTN1hn7m08dU_ z@qi{F;V`IQ2W^vaN7e<_-<2AVdxr6!c2GPGW|;#p9biO%Mv3;MJ{|!FllU5*%_c@Q={-~oJ54gk+vrGfgwfd0kKdOdxJVclR)ytK$PUxhw^=4dXibHZzIeK?WY zvsjfCL(S5m28l)w&$mp&|F)rKj|CM*^dSMbV_2PWR{{021LPi#0L8t-Y7JSDWEj!k zqCUhK+qDJP&y2@Yd9t=G%dko#sD4HfwaF?CbRHbGA%%RxAt7_#cgAb$G~kjP=&4}( z+&}8FiSu+OO$U1-&XZ*t+5wn92dnEQk5O(5jV6v0@cjx$f`T8AiBL~gYN!sb zuMKFvg&L~gWi5vZ1vPPoaT*KN9vUM!e^ci0O4mz$&Bt()P6vNGyZtxtKCa)aUYjE&lxLq5h z8iDn-gb{s%@@OtV{W(-)73s;CzI7U?Ns3TI<9Cg10QfnGW0e3~mi7a1b%5~hIEUAS z0@KDRq7xF0=QXyg(>P>RN9Mj!;ypnH$bj|&Y5=IpIV%YJBqM4KAemmgCxiM>58Qs! zk6I&(%@8_GXe2Zb!RD_Y*O1{F!3K8}71nBi=Py)4AK-mXLlui-T2gz+N3pV!1{!%= zIuhl{0iSw84cJ3Z8(t4aoit>Vxm6wO5s=RXkHo zTn|%4%W#R)NC3CLDieZ>!`dEIaiZj{0M36aIlRYi%Ya8Kv$#tnizFP3+l^;ZiDAP6+!aX zstTNsXru0{qtn>oFi*zxx$HR%6o6J8>S#}yb;f`^Y>NT?7snR?2iU**jp-xSsC%$V zqr?)f`)dojT1zHVGKNa<}a6$ttkK%)~PXz$}45zc07GzrE78vjc&7WIs zFbJ>!bqx-Mbs0BIkXVDaY8BU~AFYOlf$MVxRDnXnn7*v!ra+y6Fk`(n8V2?2q9oK- z^*(JL?4`Xnn!j1Lt?37Je%y+O%W7(fy_RSI@@J)|Rf$pp%pN&LFnq#18PtENj>~8x z`a$YHoS-03ph6QQ(ddHu$TUt3pEe7vfh@-KXHHbU3JW!+2X3nWCa!(wWUT=BCyo;+ zKI)Gm)ZjQxY;LexL-WqlX%O^Dc3^yxYj6*#ySP&opnT`8*r-OLK4s_N_nRj+56Nsi zU)F7ES*C$R!+5@|dyMI4R-3T`Tt6mY(b-0h0oC6$mj7zHAYlrk50-zt4kyM_R2VQd zoPR1#sQ|}6JF#ZI&dO*uxP7ST26`g@1aSS8PH#aa}1;hr9!B<%(uK8lTVbsBXC zVEbJBRJ0-u(0r>jH0C9BAZTPlF}1L|jC zv07*~>Yl;$hr{^*GJ>f=?E~c_*WlivLLbL@;u2@r{$?vYtkLL3deXRCoB}&@UY{%+ zert*Jgdzhp|IRFkR)Z^I>c}!4bPntX>dv?)_uzc4gE0fuqsy>Nfv zQO#hG_!iN>YD#lu3HC&Yrxw%a;bn?~LFJfm?oDZ~O>40>2sYAlb1JtvS;Z~Y3eair z{Q;x*8%+*ap8+kAc?Hpj5>XrE-jF`J40sZN{S2}~gJrb4A=yUtfz*7a$&lIvVpse^v9n+^a)223GaXcORDg7#e z^?4GkdX3oU%a-^~R%sa02j@>ON{tW_;PAQ8nPia;qXPJFejUZ zR%#TH#uaGhV%F&OmI_6nv8Xk#`&x6$*CftZD%Dck#VFO~m(jwV#AJ z`F?7D&#j+u+V3Bv{!f~u{BCU5{QCJBYCr4NuMpAd>(u^L^DiiW*$he@)ke7@#1le< znla-Kn*Yey|HR+#H@`=z&mZvz8}k2>_506?2}%X(L>vk+uKuDJd2t@0q~CKYYrxOm zdA}Ewd>L5|%EXcgXcQiSGL|S;mP8QhN`sbVV*&-$14POC5e-rZ=#$my;w7e5xNp?N z7h9e4yKpF5oDQ6q=sFNB1mp=)iF^-e70z6z%0M6yTT0lMRF?NingBHdyJJlR?8$4j z^Q{rhG1U|Ps?MKdrsQnN{C!FTtcf_2Y2Abwrch?~C11vjkOQ-`nO6c`Y1JFen=DYr z!t^d0u8Fu_)^3=qWf}HlU&-mcv9DRvRYmaY@9QM~u3vqtb847DfohTU5pA}l{)9yk zkE-#QipOKtFhme9nLODS+lxgMVG0ETr|#f*Uvso?m?+})biS$0JAKWGIu@$rebvv_ zq#1Py?ylxtK3DITD$bEaIM5X|j3yv(fE*#d6>^9Ll`ya*0uco22u?p0*Qd*x2u-sj z!hx>1I9cy-yGGoh0v5%Z2)Gk;85&&(6t0*f730bT3Q$Bkw~nk?zhOt=&qVFKmp)S*QVjci^iajsxdx&#VW(2P2wO`%WPFjqXQ^f$9>nr~|&x`D1ZV1HTG z?^)(o^j&xa5>EheGEZBC5wV6?F@18iYy`NvPTMdk8KZJ}QADT?w!M^O(*4ct8VOsn zT3e_UUjO(@p@6Nk{#n|b(lYa zRLKxd0r35Pi5?(Jj`kNh1k_9I2LY=M7!z0&?%*mM=nCxGv`G?Y)G0_Frk|&Y;1;CY zfawz`&QT>%#)6Xh`|{i)AXe%srca<*WAc5f2ZYU8%0B9IipBLzgXF-!A57uno z2qHGtc`bvI-8j(Iwoz@u41TL7PIhU=?o2yaG!cZn0z`50?`KsdBv$>h5Gbl%Zl(r? zF-q)9onp>L4HGEHAj(Xsx?@VXipK29y+> zpRQwFsdvYKl4L-gpp&Ry!h#51N(L1AYR^C<5$c35IbiApaYP*qyHfZQ(;uiEUU%~E z!y0n5j(bBDDzZrGAfEsM}hXcSJsx(e^iqm|PeDFp{m1zZZxD<)4aQ?V>16?5sQQ!UA5Z$V)ihxE@*Y<37 zW+My4$CGM7o9yf5{oXGNw8;zRQZ!5-#1W_=Ud>#nlU|rBOCtC!IyJ`0;rTKkS~M34 z#3y5vXQN0WWcxf_v&Tjdfj|OcIc&hi+Q6x3*aip1vLXVlge*ubcxJH>!kP#u9hpI9 zog`z~*u=S#1&IXbVEW-s?obU~gt}Tu1ZUdV=00+%r{lq~HO>`>F(&BS-Gx7~BBC4S z3J_6)o>E~!!~rBFnP&3j73(AT@y14l;QiwpC;=1=2qBP3@ZXS5(0&#Lj%#WELLHBUK36pzE=I?vzq%00+0$s9gTry@9O+=490qAl_ zD?|_$ML?ZAHGDqY2Ykq(aSD+2@;K!I*Sh9UR5_wHdWoncvP*ut=f=7EK*KgTF9p;{ zf?J`sKsHgQ%yha9^CvMacRq|OoGD|Thyw1w+8~ioz3?XlxINha zkR&ggM}aswAoKHe0ce)2#Qj56$GHlZ!Wk%w85Ag!_brd$V74;|jl~79ZJR*(B5l(r zFezCb`OM-%pFoZf*$SS7)EH#?Mw0>m!U3#9>(}8KzXrRC3B?314JsmsfOBcbZl9oJ z-s@!AXi`O8@Fc{wI)_2w2V5s^OC@56$JBVdc10|qMIcCCG*|Mh`d%o4h<4A!Apzt& zKB)l{zuO2pNIPT#Y(_88Rz@!{F9MzNzE*-nk=dEQ;Yz-opoHH}nelo35f!=1WcV&<29#MwL6$f=b~mOnuv=TXC6f@7?nby zs71yMZpbC?w+xUJa3L>EmbT%*oZmW(%z0?5*~;Xllv^kfd}rzpGk9VN<@MG-v1XoBNhX`Kyf-QBJM z8Z|`;HNdk}z@?Z#flJ{G%rJ{0h=aw!D+x2S&@m^&Kq=93C`A=v3dO1j7$protj*EX zIdbGqR~>PLI!&OQO#SSX=8QvnsY4%R5!%3^SP=n{qUMaS1F#GCn$=k93>e5BpiM5H z+K_1@v%{tI7?dK4fJIR^d`gc%fi$_b?XyO~D zqOvr>tzf29PZX>kf5HWEtQ@*QuD=1U;v%FT;wbdwryH=Yi8&QTYYflE0n)8}-rq!r zKK~ZV;Rg|Q{4MI=#ozZe|7Y{P?osbQG)3_P)c!%S{YVMh)X@HM+kT<>Nw!~aeunaA z`BO>`&DH0Znt$o-FH`<&{#ua-X((#krk)al*hdH_P-*;WkEi%UCjBvg|CzswpeneE zk7&YEn4|b}+q1J-0^Sigrk(LsB5{ASFkZf~imiU>DeXvl_tua|jzW zQmHmjcI=dmfKDh!G!U|4xX^=}q)g7naUM&7d;^B!aHhWJNKVJqcvA)1kDks$OP`Vv z)&h0MM(t@cdBn6a7PY%L$unsm&0Yh9*z6ExfjUhlM1@to1}bYD6kVG6W`Wgd_frYU-{o8TWpPnfB2^d>F#iPrtf zk`GSCx)a!m*#pVztw9hq5EXC~4&NlpaHR(v#kB$NZyr!S5C?A}%2U2A7jn`+Sd9V0 zu*F=&?dnA7v0B@n+@p@i6;Sr5JuWEp;E~O_zcm9!BNKt>5u89pJX3@o`_l8mK!e<) zC_OY3T7$>4f#%SFWG9&nGjU9HL>^`;Vx0%lE-OR>G{i?Gt#|l}jQB*|Uv%<%J9g6y zLGN%Dg{hcZ0s4qMF0aiiRYBx&O$-nW8=Z;+!3V!vvlrZe>uAUd9%%=gwSz_GQMihH zk@f1e)FbT!gUvQ)4TlbqW$R#r;Da}gQ~z+Xa$rYyf>&gqv9hKj@_ir!c#y!Ku*eF%BzNX+0zJWZ6sCe3$MD!q zT7=V21Bl-Q&s`Tn$pKTsk#fYQx6e<=!2vQa@sTrn!&_vjPf{^W!R^IaIN&#U%U6*P znJ!RRAn$;oxU`xf4I=V@(a10;iknJ8jvHjVF&!`#>PO!ZdIGwF%W#YwI_Kud0*>7T zZ&8Q}qJVo@k=5gMQX=69RYh)G_1iS>?hiMRQC+XO$4aqv-Dl+asD$~dfVQvBi2xni6 z5EfmU;+>M!+cJ+6bpg~IkP~Mt@i<+L;VQC+FX4Ntoqs@0uz|2+j$Xi^0}D|BP9g)b zn#@z6GU4Z|LZ9ocJV_nq;U?Las(_q8<6)jcy)YE3GKWMQFcz6{kMn!;jvvDVMdqQ- zZAIll$fhlI_}=r9dP7kVCm@TxKUUg~XVip~fUV%_r{XVDdA!?Ic|cfj*&ExO&{iLl z6r6mu4HWu-*$w0XC@TokgdBvMuL@KpJpZZS!sk#;5ExyaqC{>oOTm+&My|4s15Uy` zMU){uod>rOje$tflIAIHPyMcO&H9p#1Jy^qD#wp(5^ABYfJWF{R34~4I14ihP9lPj zUE_wO_8uA zR@CAAh{u>-44g0kQi5_@)}vZX21A`J&}nO)sMJ))w{ zF-38Sb7>&SfRBKw;0B`NH5C?m@JpU3exe9H-crX26(%IkOcYDo9>~H0>B4W<8js;b1sV|U zz$&0D>dG7^6BGANQrM=uyB(X-u*@Ucj|e;n;FQ^@KDYtb)&VE@=9!uQ%@VsQ!(bv3 zvFYVWk$S{zp5jPmzts)g#Nm^b;7!~>R9NUyzc7LfXbHz{itHmDFcNSRvmC}L77IP# zZ=8^WU+m=QJkWip|GLRZ=zVRPGC?yyOrZ7P$E#vly5KEVmcUKiaAbqV(D)67qp-|F z2KWMah5OX|nA35f_~7X;qqp_aaqM&~Cr#kVr5Cmd*~bNR9xxN;C=O;3s1BaeFR1f4 zIk|aLy+}M@DzrBGr0fK!7$g~YeDL#UrwZBz5l319J3}}p6BVdGG#0i(8-y8<6VAvn zHx>jUFcyC)PXR@-Cp{_87X6o8U0CQ?gM&Oh7$snxcf> zMd|^Hs&4XbKvcj{Y|Y?8RA?R)g_RypriWXFV>xm0>q$MHSJy!mh(7oMtAL_7q^&-% z6K^;@N173SaNb$uQJ4yK5#xy;wTh2bAo2K2TQe0r>^X@y(V#5#AS4u!TM&EAC4!S_ z3K$DcMiqsoa5fI8jO-hR;>OgGbgZ1(oI_M-5b6%d3JX0l2To#>b8ncaxPMq;Z^((w zQ=3QX^4n6`Gqu?@RpJjVuv;6b4b{z4pzwGmO>PxaBlCcwu+D>{SG!uC0w6WUlT($1 zqwo~()q#jMqVPCVEwjI-944Qs`GpE39^@0z7brRpRmrwNMvi&1la@o4tDJ`e@rN4v zAoI9RtzI$?ymWBxu8IvJ<)97tt357ca+Ax=Uuo(RkBBt6h?M2u==J^v;?@u*9NgY*@=r_a=h=SU z^&3Z^)%Yb>f6HWuGLrvV8TK1&t6D=D%A?kR=unKSKcM+X{QYU6LE01+(rR2}sm65S z`J9gqab*$&*+#w)q=%zjL3+T1aEuEHl3sHlB(mT~oC#56+-m-VL>Cza9m0iBMNg`6 zkM$coLYuY8um`(R4K9Oq`d!3rQhirZY9QLsgewTCG(!9ayhl&&k(I30C^QJ{2ReSCOEB`Y~eEw}>5ZXN^%#Q7_@5XuSzVy%Xj{Az?a5Az`KC!B-Mdy$=)@R%Vqf0l|l zD&_{gUa z^c9!Fw(IRaWiEfS8s1R_CB{i@PdiJw_V`&}^J$58^+_GdTfx2K6x14bn4qTWEWkvc++kRcr&WP4F-Z0m0be3fw} z+?5(8L7q$pdxF6>1LL%~U{w zyi+?k13P)iO@yG{(Bh^+W{zrRIE{rFk?iy0lD{G?l?XJ=aRKsC^2`&(X9XL?Ybiejn8#I6ifp ztB>oKiaNt22y6+zU={g5f1uO2B!-??W0MIC*b&|)ti4$3&{i-YkRMA54^o%lwPQe; zD{dP|z^m47x+5A5gd65XYA57})f#C}A8Muz392XT6cUSV8jMl{Dn$LnvqF>s_tEM# zo>EU?K{Ui12y_Uqzyo1H_!$pKqj6*)iOK7ZPdaM_qzEq}S>AFDb;By0mI)dHB7|G) zpy&|-UZKsHVVQ;%8|Fdka!?`MK~(4i|8ZIB@FCDkDquOxf?TJ@VihJq5N~h^Q~`Qb z#2Suw#o?6o4i#(Ce-Bw}R11xgT}8*CI{e2&>K#sk?2u`f6O(5GgaoX|9+~$!J$cLs zEnaulii6H(9wVtNcsNvXNX4;1CAml!nhkRuP#-5$eK#E+42A{CppOSbf~eJsH4ty4 z8y>?P2xJDl1~QCGhUkF_;U_y376iHkeni7fgP`HaRF0miJq`pe1GxnZ#~Nq1;C4K8 zP67*)AnP-q*jJpBDquelY-G(X&S7B=M1~^NfVp^vbJC27%ufwT=)vzd)AnW4M!Q0U z@y3vXT$u%dwRu$|AYHN(vmhnfRi#5XdbJzT#mA%r8R}#u*E|Fp{9K*0990Jjjx5HL zOA%|Ry}+@>IQz_mWCYR;4rYmVMI5YH$@4&bDM!0{W^}W{G7jjGbUtNY3Q_%dHZUB}A1Bg)`ZzVZF$t{ieqI0WJQKpt>JiA89~Ads1WWOW0Sx_ zR`?KY=7AATkR~CiD;(_#p+4tf`g!P51$qGW!x`ryN1J?tnaY_l zp-mwEc_Bd{PvAqW*3bmAAkZFYG~hz`1=qRoABaP^gH!_|4LBG`l6+b8B&n#peS$(; z5wa?hjjM)>HQ-1x6m3VPLu7#USSrhM6}Qwu>Olvh&2;ChAXpS65C?IBsEns4G!b1q zYU;>D2%Lz9LxOBh&5Dg3sqZoU5%GpbwI8?;HB5s%pE}${h$)B<^B_l@v^;ZQS5krT zK$~&02E1xl{OH{D6&7lkInkhL6TQIfiJ?J20A+w0Q72gQ%1JFW54!-d0bQ}gL9e(O zYuI8HH)O(1+C+tcn4`yg5a?=EiFwt2G48(_eF3!w?;a)Il}5KL$T{(@AVj!rtJtdo zy#`#8if2{utDM-pI#J{Y+70s{+4r%oR)ZUG1{327R;17%!1%Hv1wlu#c#}+=dRe`GFl}T-8a*m(6 zAw)F6;jU10s16gN4YWtgg1k9NF|at!>Fcr}8fy{+P6PeMnT$ZEVH$+PH91Mize)!> z4FX^Bnio)?8;7}%`D$9N!7XHRO-T-TkYV`I@1NYDj(D`DHrH;^ZkPvIp+TrPBFwN> zgD6*KLe|#Zm=fU~q_#IrZc4PPhhz!^vZeMCHA_1P@A0@A1i3=FfnG!Q_5*AVv<}D) z{Ensomg5zRJ~ZNu$qIILI8!XvK(~>pgn8QUuvW-5OogD?I8{5(sM5+cP>~e92A9-s zysO#5_b*n#?`ujDlbZ!uAlphuxgsVO2Qgz3*lMX|8aFwvR{eKChL~8X?X{L|a0kgm zR2=HrHAT585M)H*Aro8(cMug1tJs`@P$BAsE`b`!n$KJ~hebLeMIb<4$XEyvt2KtR zAlw?JG-RxR3gOgLfp9~!-_r(C1U@8-anG>4hliM$KFqW=EMS<5pdq{dt8D*T$y4#|&9|Xl z5N3Z-^DX>+t82mRzqk2rTHj;K-y=cA_m{pO@K%`pKLeNlVYb5Te~iC>%->J&_f!1+ z41X8F0jN}1C21G_gO+E|7iXM*}@;$p0v~d zy_a@cs{!l-*rQ;`(yemApndcTm#UY<6&a!uZNbeBsf1vmh3(aIQ-%>zX}N0aor~f& zRc}{uXNj-`wBN4Q!|LxJkt`K$S77=b7BB!m*I5O%-<|dzZT2}?g=T`qA2BR{$Z$Td zCh9k64}Q2oz_^bN~9Jxeh3 z92Ij_Sj)h5FZC<3;a%eb5tjHl^(jAvL3;}jR%rOGD%M%Tu(q$cL#;I`^0`aZ`z%}_ zaYbwoq_WfS{kEEmI(<9pAZ|mdKA~cdil@>u&lx6;S)=f35ifw%BY5Dxks(^?s6qU! z`GFHryll1-X`VsLUnse!kuCty?-?oW!ebiU6)@!6Rp`DIFvxD?9@T=8dqDd`nye4lJivYz zx<}rCh=Jo+hrkDL3{{-1Cgcmy5SftMDRp@g|zcdTWJ8_nHY;!j0yE{3jd%(R>e$e|&wtRuRhS~|R^lp%)h|o%lHROhj zTRuubq43{G(}+Csgmt5uJ4XqvUsDtenGAka$312IJt#jXq0A4d0K(VUCq^anGy{kn`p%pen*1tKf8usx)P%#UOP6u-;SmaJdk=*7HSn*ugWAB@fb$3y z!0BJA;C&saExG_C0k=3=H0lMQe-L@J3GZ9Oz_D}ciUQqh0xW>_3#wbbkkvld{?J75 z5)$YcOny#@vt*@0t6o@8fcs1&;1W;GDgyA!dX9QwnR=~W052G7TJZw6j-h64_Q!#& z6~p%YaEo$*^J=Jh!svWLEN#_5=zx3y1PrR|u5C5mshS0cSds;q0_p~S#45n+tzA$D z@I7Z<(JpWu98!XCJW*BXbBhH9SCdh}vW3&K7wrNtzD5A(e@T{)G{Ei++0WG0L6$V+ z619*iT&nGr&Q)=Rs`UeP2!fwhuzE`uZkDZw+QS~HU4#pOyg2Lwsc$nDPlk%<7C`mu zs@5(Tv_~p2T)bdlpCC)<7J&CN0q9;8=mPiw&igc<8{JsD0IDOyiz;4q1SSmz&j)u_ z0b)EF6;{OWGUweRlftm=Z7vD4qaH$Qn2iRRGy9*S6sHApZrp=lM@{&b$kTSbE4P zKJRQ9go1(Fcj}KiT$83+ys*bQh9}YoLeK&5!S3_*RD$gD><|lJ{oyg<3(^f%|GMgL zR0HrkdIv-a@5%DHb5VfS1Jr+P%>Ha0*e(yyp9Z-6+_BAUVbDhHIeMxawRemqPDW?Q z&~O4Pk*T7f_A&rU;+>AGJP0#5HKC1mTd&ZDSt`Ii06c00Vk)6nSf?dG@d5Dj9ZH-f zR16$J6=3!y(2@oaTxo}_J5}sbp$`Z>A_g8`R5;Gk{&b;XI8VL+Bsx~fr#a8YDz?(` z5@tyYy(M!`zJLG$=$`Y+Nu^OKKofBFQvrGpajC+%J(s@#&m6LG0`$AMeZJ$h&OnU^