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

Service component:

- Improved filter to select service handler
- Disabled configuration of devices when there is nothing to configure
- Corrected TAPI Service Handler to use endpoint uuids instead of names
- Extended filters for selecting MicroWave Service Handler
- First implementation of L2NM IETF L2VPN Service Handler
- Extended service handler selector to be aware of devices managed by a controller
- Minor cosmetic changes
parent 6323b744
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -73,6 +73,9 @@ class ServiceHandlerFactory:
            if field_indice is None: continue
            if not isinstance(field_values, Iterable) or isinstance(field_values, str):
                field_values = [field_values]
            if len(field_values) == 0:
                # do not allow empty fields; might cause wrong selection
                raise UnsatisfiedFilterException(filter_fields)

            field_enum_values = FILTER_FIELD_ALLOWED_VALUES.get(field_name)

+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ SERVICE_HANDLERS = [
    (MicrowaveServiceHandler, [
        {
            FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_L2NM,
            FilterFieldEnum.DEVICE_DRIVER : DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY,
            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352],
        }
    ]),
    (P4ServiceHandler, [
+11 −5
Original line number Diff line number Diff line
@@ -21,10 +21,13 @@ def setup_config_rules(
    service_settings : TreeNode, endpoint_settings : TreeNode
) -> List[Dict]:

    json_settings          : Dict = {} if service_settings  is None else service_settings.value
    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
    if service_settings  is None: return []
    if endpoint_settings is None: return []

    mtu                 = json_settings.get('mtu',                 1450 )    # 1512
    #json_settings          : Dict = service_settings.value
    json_endpoint_settings : Dict = endpoint_settings.value

    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
    #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
    #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
    #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
@@ -80,8 +83,11 @@ def teardown_config_rules(
    service_settings : TreeNode, endpoint_settings : TreeNode
) -> List[Dict]:

    #json_settings          : Dict = {} if service_settings  is None else service_settings.value
    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
    if service_settings  is None: return []
    if endpoint_settings is None: return []

    #json_settings          : Dict = service_settings.value
    json_endpoint_settings : Dict = endpoint_settings.value

    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
    #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
+15 −21
Original line number Diff line number Diff line
@@ -47,34 +47,28 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
        service_uuid = self.__service.service_id.service_uuid.uuid
        settings = self.__settings_handler.get('/settings')
        json_settings : Dict = {} if settings is None else settings.value
        capacity_value   = json_settings.get('capacity_value',   50.0)
        capacity_unit    = json_settings.get('capacity_unit',    'GHz')
        layer_proto_name = json_settings.get('layer_proto_name', 'PHOTONIC_MEDIA')
        layer_proto_qual = json_settings.get('layer_proto_qual', 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC')
        direction        = json_settings.get('direction',        'UNIDIRECTIONAL')
        encap_type = json_settings.get('encapsulation_type', '')
        vlan_id    = json_settings.get('vlan_id', 100)

        results = []
        try:
            device_uuid_src, endpoint_uuid_src = get_device_endpoint_uuids(endpoints[0])
            device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
            src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])

            if device_uuid_src != device_uuid_dst:
                raise Exception('Diferent Src-Dst devices not supported by now')
            device_uuid = device_uuid_src
            if src_device_uuid != dst_device_uuid:
                raise Exception('Different Src-Dst devices not supported by now')
            device_uuid = src_device_uuid

            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
            endpoint_name_src = get_endpoint_matching(device_obj, endpoint_uuid_src).name
            endpoint_name_dst = get_endpoint_matching(device_obj, endpoint_uuid_dst).name

            json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                'uuid'              : service_uuid,
                'input_sip'               : endpoint_name_src,
                'output_sip'              : endpoint_name_dst,
                'capacity_unit'           : capacity_unit,
                'capacity_value'          : capacity_value,
                'layer_protocol_name'     : layer_proto_name,
                'layer_protocol_qualifier': layer_proto_qual,
                'direction'               : direction,
                'src_device_uuid'   : src_device_uuid,
                'src_endpoint_uuid' : src_endpoint_uuid,
                'dst_device_uuid'   : dst_device_uuid,
                'dst_endpoint_uuid' : dst_endpoint_uuid,
                'encapsulation_type': encap_type,
                'vlan_id'           : vlan_id,
            })
            del device_obj.device_config.config_rules[:]
            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
@@ -102,7 +96,7 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
            device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])

            if device_uuid_src != device_uuid_dst:
                raise Exception('Diferent Src-Dst devices not supported by now')
                raise Exception('Different Src-Dst devices not supported by now')
            device_uuid = device_uuid_src

            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+9 −10
Original line number Diff line number Diff line
@@ -24,12 +24,9 @@ def setup_config_rules(
    if service_settings  is None: return []
    if endpoint_settings is None: return []

    json_settings          : Dict = service_settings.value
    #json_settings          : Dict = service_settings.value
    json_endpoint_settings : Dict = endpoint_settings.value

    json_settings          : Dict = {} if service_settings  is None else service_settings.value
    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value

    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
    #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
    #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
@@ -41,9 +38,8 @@ def setup_config_rules(
    vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
    #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
    #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
    remote_router       = json_endpoint_settings.get('remote_router',       '5.5.5.5')  # '5.5.5.5'
    circuit_id          = json_endpoint_settings.get('circuit_id',          '111'    )  # '111'
    
    remote_router       = json_endpoint_settings.get('remote_router',       '0.0.0.0')  # '5.5.5.5'
    circuit_id          = json_endpoint_settings.get('circuit_id',          '000'    )  # '111'

    if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
    network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
@@ -86,8 +82,11 @@ def teardown_config_rules(
    service_settings : TreeNode, endpoint_settings : TreeNode
) -> List[Dict]:

    #json_settings          : Dict = {} if service_settings  is None else service_settings.value
    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
    if service_settings  is None: return []
    if endpoint_settings is None: return []

    #json_settings          : Dict = service_settings.value
    json_endpoint_settings : Dict = endpoint_settings.value

    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
    #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
Loading