diff --git a/src/common/Constants.py b/src/common/Constants.py index 4d4dcacf5d9174d81ba0dca189161416505c107f..b873b351c8de0538c5e057dd185096af8486b45f 100644 --- a/src/common/Constants.py +++ b/src/common/Constants.py @@ -131,3 +131,14 @@ DEFAULT_SERVICE_HTTP_BASEURLS = { ServiceNameEnum.NBI .value : None, ServiceNameEnum.WEBUI.value : None, } + + +def OpticalServiceType(value): + if value == "multi_granular": + return 1 + elif value == "flex_grid": + return 2 + elif value == "pmp": + return 3 + else: + return 1 \ No newline at end of file diff --git a/src/opticalcontroller/OpticalController.py b/src/opticalcontroller/OpticalController.py index effa153afc44a43fe53ea0a28a316380357549b2..e859e3ba101eeda5280634df402d77b171610804 100644 --- a/src/opticalcontroller/OpticalController.py +++ b/src/opticalcontroller/OpticalController.py @@ -43,8 +43,8 @@ def index(): return render_template('index.html') -#@optical.route('/AddLightpath/<string:src>/<string:dst>/<int:bitrate>/<int:bidir>') -@optical.route('/AddLightpath/<string:src>/<string:dst>/<int:bitrate>') +#@optical.route('/AddLightpath/<string:src>/<string:dst>/<int:bitrate>') +@optical.route('/AddLightpath/<string:src>/<string:dst>/<int:bitrate>/<int:bidir>') @optical.response(200, 'Success') @optical.response(404, 'Error, not found') class AddLightpath(Resource): diff --git a/src/opticalcontroller/RSA.py b/src/opticalcontroller/RSA.py index 39b5772dff1f78c6bfa40ed540af8e56927b5c1c..f5c8bbc69a365015cf96466c6fb4b5f5ddf97c1c 100644 --- a/src/opticalcontroller/RSA.py +++ b/src/opticalcontroller/RSA.py @@ -593,18 +593,6 @@ class RSA(): self.get_fibers_forward(links, slots, band) if bidir: self.get_fibers_backward(links, slots, band) - ''' - fibers_f = self.get_fibers_forward(links, slots, band) - - fibers_b = [] - if bidir: - fibers_b = self.get_fibers_backward(links, fibers_f, slots, band) - if debug: - print("forward") - print(fibers_f) - print("backward") - print(fibers_b) - ''' add = links[0] drop = links[-1] inport = "0" @@ -764,7 +752,13 @@ class RSA(): return t_flows, band, slots, {}, {} def rsa_computation(self, src, dst, rate, bidir): - self.flow_id += 1 + if self.flow_id == 0: + self.flow_id += 1 + else: + if (self.db_flows[self.flow_id]["bidir"] == 1): + self.flow_id += 2 + else: + self.flow_id += 1 self.db_flows[self.flow_id] = {} self.db_flows[self.flow_id]["flow_id"] = self.flow_id self.db_flows[self.flow_id]["src"] = src diff --git a/src/service/service/ServiceServiceServicerImpl.py b/src/service/service/ServiceServiceServicerImpl.py index a316c70c48bfc068371045f1635a484404dfaec3..300e5a6fe4fbb12de5c421ff36fbd4923d9c88b7 100644 --- a/src/service/service/ServiceServiceServicerImpl.py +++ b/src/service/service/ServiceServiceServicerImpl.py @@ -30,7 +30,7 @@ from common.tools.context_queries.Service import get_service_by_id from common.tools.grpc.Tools import grpc_message_to_json, grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Topology import json_topology_id -from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME +from common.Constants import OpticalServiceType, DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME from common.Settings import ( is_deployed_e2e_orch, is_deployed_optical, is_deployed_te ) @@ -43,7 +43,7 @@ from .service_handler_api.ServiceHandlerFactory import ServiceHandlerFactory from .task_scheduler.TaskScheduler import TasksScheduler from .tools.GeodesicDistance import gps_distance from .tools.OpticalTools import ( - add_lightpath, delete_lightpath, adapt_reply, get_device_name_from_uuid, + add_flex_lightpath, add_lightpath, delete_lightpath, adapt_reply, get_device_name_from_uuid, get_optical_band, refresh_opticalcontroller, DelFlexLightpath , extend_optical_band ) @@ -276,13 +276,17 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): ports = [] for endpoint_id in service.service_endpoint_ids: endpoint_device_uuid = endpoint_id.device_id.device_uuid.uuid - endpoint_device_name = device_names[endpoint_device_uuid] + if "." in endpoint_device_uuid: + endpoint_device_name = endpoint_device_uuid + else: + endpoint_device_name = device_names[endpoint_device_uuid] devs.append(endpoint_device_name) ports.append(endpoint_id.endpoint_uuid.uuid) src = devs[0] dst = devs[1] bidir = None ob_band = None + oc_type = "multi-granular" bitrate = 100 for constraint in service.service_constraints: if "bandwidth" in constraint.custom.constraint_type: @@ -291,10 +295,18 @@ class ServiceServiceServicerImpl(ServiceServiceServicer): bidir = int(constraint.custom.constraint_value) elif "optical-band-width" in constraint.custom.constraint_type: ob_band = int(constraint.custom.constraint_value) - + elif "type" in constraint.custom.constraint_type: + oc_type = OpticalServiceType(str(constraint.custom.constraint_value)) + + reply_txt = "" # to get the reply form the optical module - reply_txt = add_lightpath(src, dst, bitrate, bidir, ob_band) - + #multi-granular + if oc_type == 1: + reply_txt = add_flex_lightpath(src, dst, bitrate, bidir, ob_band) + elif oc_type == 2: + reply_txt = add_lightpath(src, dst, bitrate, bidir) + else: + reply_txt = add_flex_lightpath(src, dst, bitrate, bidir, ob_band) # reply with 2 transponders and 2 roadms reply_json = json.loads(reply_txt) LOGGER.info('[optical] reply_json[{:s}]={:s}'.format(str(type(reply_json)), str(reply_json))) diff --git a/src/service/service/tools/OpticalTools.py b/src/service/service/tools/OpticalTools.py index 10787ca1dd2ecffe18091ec3a720082d27f5f213..ded45b63a9e14d0e60689bc1996b6e826977f91d 100644 --- a/src/service/service/tools/OpticalTools.py +++ b/src/service/service/tools/OpticalTools.py @@ -120,7 +120,7 @@ def refresh_opticalcontroller(topology_id : dict): log.debug(f"GetTopology Response {res}") -def add_lightpath(src, dst, bitrate, bidir, ob_band) -> str: +def add_flex_lightpath(src, dst, bitrate, bidir, ob_band) -> str: if not TESTING: urlx = "" headers = {"Content-Type": "application/json"} @@ -142,6 +142,24 @@ def add_lightpath(src, dst, bitrate, bidir, ob_band) -> str: if bidir == 0: return reply_uni_txt return reply_bid_txt + +def add_lightpath(src, dst, bitrate, bidir) -> str: + if not TESTING: + urlx = "" + headers = {"Content-Type": "application/json"} + base_url = get_optical_controller_base_url() + if bidir is None: + bidir = 1 + urlx = "{:s}/AddLightpath/{:s}/{:s}/{:s}/{:s}".format(base_url, src, dst, str(bitrate), str(bidir)) + r = requests.put(urlx, headers=headers) + print(f"addpathlight {r}") + reply = r.text + return reply + else: + if bidir is not None: + if bidir == 0: + return reply_uni_txt + return reply_bid_txt def get_optical_band(idx) -> str: