diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index e983f90dc998c60d8ed95641651ed882812a1519..b7b1432f4fde59fc093f6dc8b9c6590cbcd77e49 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -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,26 +228,33 @@ 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), {
- '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), {
- 'router_id': dst_router_id,
- 'sub_interface_index': vlan_id,
- 'vlan_id': vlan_id,
- 'remote_router': src_router_id,
- 'circuit_id': circuit_id,
- }),
+ 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), {
+ 'router_id': dst_router_id,
+ 'sub_interface_index': vlan_id,
+ 'vlan_id': vlan_id,
+ 'remote_router': src_router_id,
+ 'circuit_id': circuit_id,
+ }),
]
return json_service_l2nm_planned(
request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
@@ -251,32 +268,41 @@ 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), {
- 'router_id' : src_router_id,
- 'route_distinguisher': route_distinguisher,
- 'sub_interface_index': vlan_id,
- 'vlan_id' : vlan_id,
- 'address_ip' : src_address_ip,
- 'address_prefix' : 16,
- }),
- 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,
- 'vlan_id' : vlan_id,
- 'address_ip' : dst_address_ip,
- 'address_prefix' : 16,
- }),
+ 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,
+ 'vlan_id' : vlan_id,
+ 'address_ip' : src_address_ip,
+ 'address_prefix' : 16,
+ }),
+ 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,
+ 'vlan_id' : vlan_id,
+ 'address_ip' : dst_address_ip,
+ 'address_prefix' : 16,
+ }),
]
return json_service_l3nm_planned(
request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
@@ -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,26 +365,33 @@ 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), {
- '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), {
- 'router_id': dst_router_id,
- 'sub_interface_index': vlan_id,
- 'vlan_id': vlan_id,
- 'remote_router': src_router_id,
- 'circuit_id': circuit_id,
- }),
+ 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), {
+ 'router_id': dst_router_id,
+ 'sub_interface_index': vlan_id,
+ 'vlan_id': vlan_id,
+ 'remote_router': src_router_id,
+ 'circuit_id': circuit_id,
+ }),
]
elif request_type == RequestType.SLICE_L3NM:
@@ -365,32 +399,41 @@ 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), {
- 'router_id' : src_router_id,
- 'route_distinguisher': route_distinguisher,
- 'sub_interface_index': vlan_id,
- 'vlan_id' : vlan_id,
- 'address_ip' : src_address_ip,
- 'address_prefix' : 16,
- }),
- 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,
- 'vlan_id' : vlan_id,
- 'address_ip' : dst_address_ip,
- 'address_prefix' : 16,
- }),
+ 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,
+ 'vlan_id' : vlan_id,
+ 'address_ip' : src_address_ip,
+ 'address_prefix' : 16,
+ }),
+ 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,
+ 'vlan_id' : vlan_id,
+ 'address_ip' : dst_address_ip,
+ 'address_prefix' : 16,
+ }),
]
return json_slice(