Commit d167ccc7 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Merge branch 'feat/xr_service_handler_fix_for_single_layer_services' into 'develop'

Fix xr service handler for cases where XR constellation is represented as single device

See merge request !85
parents fb817b87 fc5fdff5
Loading
Loading
Loading
Loading
+16 −2
Original line number Original line Diff line number Diff line
@@ -42,6 +42,13 @@ class TapiXrServiceHandler(_ServiceHandler):
    ) -> List[Union[bool, Exception]]:
    ) -> List[Union[bool, Exception]]:


        chk_type('endpoints', endpoints, list)
        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 []
        if len(endpoints) != 4: return []


        service_uuid = self.__service.service_id.service_uuid.uuid
        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')
                raise Exception('Different Src-Dst devices not supported by now')
            controller = src_controller
            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), {
            json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                'uuid'           : service_uuid,
                'uuid'           : service_uuid,
                'input_sip_name' : '|'.join([src_device.name, src_endpoint.name]),
                'input_sip_name' : constellation_unique_src,
                'output_sip_name': '|'.join([dst_device.name, dst_endpoint.name]),
                'output_sip_name': constellation_unique_dst,
                'capacity_unit'  : capacity_unit,
                'capacity_unit'  : capacity_unit,
                'capacity_value' : capacity_value,
                'capacity_value' : capacity_value,
            })
            })