Commit 3eca13f7 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Load Generator component:

- corrected device name retrieval
- corrected composition of router_ids and and IP addresses
- minor code formatting
parent c14a8d3e
Loading
Loading
Loading
Loading
+117 −74
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
import logging, json, random, threading
from typing import Dict, Optional, Set, Tuple
from common.proto.context_pb2 import Empty, TopologyId
from common.tools.grpc.Tools import grpc_message_to_json
from common.tools.object_factory.Constraint import json_constraint_custom
from common.tools.object_factory.ConfigRule import json_config_rule_set
from common.tools.object_factory.Device import json_device_id
@@ -41,6 +42,9 @@ class RequestGenerator:
        self._endpoint_ids_to_types : Dict[Tuple[str, str], str] = dict()
        self._endpoint_types_to_ids : Dict[str, Set[Tuple[str, str]]] = dict()

        self._device_data : Dict[str, Dict] = dict()
        self._device_endpoint_data : Dict[str, Dict[str, Dict]] = dict()

    def initialize(self) -> None:
        with self._lock:
            self._available_device_endpoints.clear()
@@ -55,9 +59,14 @@ class RequestGenerator:
            devices = context_client.ListDevices(Empty())
            for device in devices.devices:
                device_uuid = device.device_id.device_uuid.uuid
                self._device_data[device_uuid] = grpc_message_to_json(device)

                _endpoints = self._available_device_endpoints.setdefault(device_uuid, set())
                for endpoint in device.device_endpoints:
                    endpoint_uuid = endpoint.endpoint_id.endpoint_uuid.uuid
                    endpoints = self._device_endpoint_data.setdefault(device_uuid, dict())
                    endpoints[endpoint_uuid] = grpc_message_to_json(endpoint)

                    endpoint_type = endpoint.endpoint_type
                    _endpoints.add(endpoint_uuid)
                    self._endpoint_ids_to_types.setdefault((device_uuid, endpoint_uuid), endpoint_type)
@@ -191,7 +200,8 @@ class RequestGenerator:
        dst_endpoint_types = {dst_endpoint_type} if request_type in {RequestType.SERVICE_TAPI} else None

        # identify excluded destination devices
        exclude_device_uuids = {} if request_type in {RequestType.SERVICE_TAPI, RequestType.SERVICE_MW} else {src_device_uuid}
        REQUESTTYPES_REUSING_DEVICES = {RequestType.SERVICE_TAPI, RequestType.SERVICE_MW}
        exclude_device_uuids = {} if request_type in REQUESTTYPES_REUSING_DEVICES else {src_device_uuid}

        # choose feasible destination endpoint
        dst = self._use_device_endpoint(
@@ -218,20 +228,27 @@ class RequestGenerator:
            ]
            vlan_id = num_request % 1000
            circuit_id = '{:03d}'.format(vlan_id)
            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))

            src_device_name = self._device_data[src_device_uuid]['name']
            src_router_id = '10.0.0.{:d}'.format(int(src_device_name.replace('R', '')))

            dst_device_name = self._device_data[dst_device_uuid]['name']
            dst_router_id = '10.0.0.{:d}'.format(int(dst_device_name.replace('R', '')))

            config_rules = [
                json_config_rule_set('/settings', {
                    'mtu': 1512
                }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                        'router_id': src_router_id,
                        'sub_interface_index': vlan_id,
                        'vlan_id': vlan_id,
                        'remote_router': dst_router_id,
                        'circuit_id': circuit_id,
                    }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                        'router_id': dst_router_id,
                        'sub_interface_index': vlan_id,
                        'vlan_id': vlan_id,
@@ -251,17 +268,25 @@ class RequestGenerator:
            bgp_as = 60000 + (num_request % 10000)
            bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, 333)
            route_distinguisher = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            src_address_ip = '.'.join([src_device_uuid.replace('R', ''), '0'] + src_endpoint_uuid.split('/'))
            dst_address_ip = '.'.join([dst_device_uuid.replace('R', ''), '0'] + dst_endpoint_uuid.split('/'))

            src_device_name = self._device_data[src_device_uuid]['name']
            src_endpoint_name = self._device_endpoint_data[src_device_uuid][src_endpoint_uuid]['name']
            src_router_id = '10.0.0.{:d}'.format(int(src_device_name.replace('R', '')))
            src_address_ip = '.'.join([src_device_name.replace('R', ''), '0'] + src_endpoint_name.split('/'))

            dst_device_name = self._device_data[dst_device_uuid]['name']
            dst_endpoint_name = self._device_endpoint_data[dst_device_uuid][dst_endpoint_uuid]['name']
            dst_router_id = '10.0.0.{:d}'.format(int(dst_device_name.replace('R', '')))
            dst_address_ip = '.'.join([dst_device_name.replace('R', ''), '0'] + dst_endpoint_name.split('/'))

            config_rules = [
                json_config_rule_set('/settings', {
                    'mtu'             : 1512,
                    'bgp_as'          : bgp_as,
                    'bgp_route_target': bgp_route_target,
                }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                        'router_id'          : src_router_id,
                        'route_distinguisher': route_distinguisher,
                        'sub_interface_index': vlan_id,
@@ -269,7 +294,8 @@ class RequestGenerator:
                        'address_ip'         : src_address_ip,
                        'address_prefix'     : 16,
                    }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                        'router_id'          : dst_router_id,
                        'route_distinguisher': route_distinguisher,
                        'sub_interface_index': vlan_id,
@@ -313,7 +339,8 @@ class RequestGenerator:
        src_device_uuid,src_endpoint_uuid = src

        # identify excluded destination devices
        exclude_device_uuids = {} if request_type in {RequestType.SERVICE_TAPI, RequestType.SERVICE_MW} else {src_device_uuid}
        REQUESTTYPES_REUSING_DEVICES = {RequestType.SERVICE_TAPI, RequestType.SERVICE_MW}
        exclude_device_uuids = {} if request_type in REQUESTTYPES_REUSING_DEVICES else {src_device_uuid}

        # choose feasible destination endpoint
        dst = self._use_device_endpoint(request_uuid, request_type, exclude_device_uuids=exclude_device_uuids)
@@ -338,20 +365,27 @@ class RequestGenerator:
        if request_type == RequestType.SLICE_L2NM:
            vlan_id = num_request % 1000
            circuit_id = '{:03d}'.format(vlan_id)
            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))

            src_device_name = self._device_data[src_device_uuid]['name']
            src_router_id = '10.0.0.{:d}'.format(int(src_device_name.replace('R', '')))

            dst_device_name = self._device_data[dst_device_uuid]['name']
            dst_router_id = '10.0.0.{:d}'.format(int(dst_device_name.replace('R', '')))

            config_rules = [
                json_config_rule_set('/settings', {
                    'mtu': 1512
                }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                        'router_id': src_router_id,
                        'sub_interface_index': vlan_id,
                        'vlan_id': vlan_id,
                        'remote_router': dst_router_id,
                        'circuit_id': circuit_id,
                    }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                        'router_id': dst_router_id,
                        'sub_interface_index': vlan_id,
                        'vlan_id': vlan_id,
@@ -365,17 +399,25 @@ class RequestGenerator:
            bgp_as = 60000 + (num_request % 10000)
            bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, 333)
            route_distinguisher = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
            src_address_ip = '.'.join([src_device_uuid.replace('R', ''), '0'] + src_endpoint_uuid.split('/'))
            dst_address_ip = '.'.join([dst_device_uuid.replace('R', ''), '0'] + dst_endpoint_uuid.split('/'))

            src_device_name = self._device_data[src_device_uuid]['name']
            src_endpoint_name = self._device_endpoint_data[src_device_uuid][src_endpoint_uuid]['name']
            src_router_id = '10.0.0.{:d}'.format(int(src_device_name.replace('R', '')))
            src_address_ip = '.'.join([src_device_name.replace('R', ''), '0'] + src_endpoint_name.split('/'))

            dst_device_name = self._device_data[dst_device_uuid]['name']
            dst_endpoint_name = self._device_endpoint_data[dst_device_uuid][dst_endpoint_uuid]['name']
            dst_router_id = '10.0.0.{:d}'.format(int(dst_device_name.replace('R', '')))
            dst_address_ip = '.'.join([dst_device_name.replace('R', ''), '0'] + dst_endpoint_name.split('/'))

            config_rules = [
                json_config_rule_set('/settings', {
                    'mtu'             : 1512,
                    'bgp_as'          : bgp_as,
                    'bgp_route_target': bgp_route_target,
                }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                        'router_id'          : src_router_id,
                        'route_distinguisher': route_distinguisher,
                        'sub_interface_index': vlan_id,
@@ -383,7 +425,8 @@ class RequestGenerator:
                        'address_ip'         : src_address_ip,
                        'address_prefix'     : 16,
                    }),
                json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                json_config_rule_set(
                    '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                        'router_id'          : dst_router_id,
                        'route_distinguisher': route_distinguisher,
                        'sub_interface_index': vlan_id,