From f00ccfaffc067df9b694240b3e5939953520c396 Mon Sep 17 00:00:00 2001 From: Ville Hallivuori Date: Tue, 4 Apr 2023 12:59:54 +0300 Subject: [PATCH] Fix xr service handler for cases where XR constellation is represented as single device --- .../tapi_xr/TapiXrServiceHandler.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py b/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py index a1e1b8a6f..a79ebb82d 100644 --- a/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py +++ b/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py @@ -42,6 +42,13 @@ class TapiXrServiceHandler(_ServiceHandler): ) -> List[Union[bool, Exception]]: chk_type('endpoints', endpoints, list) + + # When using regular mode where XR constellation is a single device, we get two endpoints. + # Convert that representation to a form that is understood by the service handler that + # expects constellation to be represented as multiple devices. + if len(endpoints) == 2: + endpoints = [None, endpoints[0], endpoints[1], None] + if len(endpoints) != 4: return [] service_uuid = self.__service.service_id.service_uuid.uuid @@ -68,10 +75,17 @@ class TapiXrServiceHandler(_ServiceHandler): raise Exception('Different Src-Dst devices not supported by now') controller = src_controller + # If the special mode that splits XR constellation to multiple modelled devices is used, + # add the device name to interface name. Otherwise use it as is (it will already contain pipe character + # end edge device name). This code should be refactored, as interface name structure is internal matter + # to XR driver and subject to change. + constellation_unique_src = src_endpoint.name if "|" in src_endpoint.name else '|'.join([src_device.name, src_endpoint.name]) + constellation_unique_dst = dst_endpoint.name if "|" in dst_endpoint.name else '|'.join([dst_device.name, dst_endpoint.name]) + json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), { 'uuid' : service_uuid, - 'input_sip_name' : '|'.join([src_device.name, src_endpoint.name]), - 'output_sip_name': '|'.join([dst_device.name, dst_endpoint.name]), + 'input_sip_name' : constellation_unique_src, + 'output_sip_name': constellation_unique_dst, 'capacity_unit' : capacity_unit, 'capacity_value' : capacity_value, }) -- GitLab