Skip to content
Snippets Groups Projects

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

1 file
+ 16
2
Compare changes
  • Side-by-side
  • Inline
@@ -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,
})
Loading