X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=inline;f=RO-SDN-tapi%2Fosm_rosdn_tapi%2Fmessage_composers.py;fp=RO-SDN-tapi%2Fosm_rosdn_tapi%2Fmessage_composers.py;h=f5bcdae20694f20f82301a8ca802eaae87dc563b;hb=210ec7ca0dc0df57a9302486eedea70f9afafb18;hp=0000000000000000000000000000000000000000;hpb=ce61568d0ed0ed91ff684761b3e97102dd4e8883;p=osm%2FRO.git diff --git a/RO-SDN-tapi/osm_rosdn_tapi/message_composers.py b/RO-SDN-tapi/osm_rosdn_tapi/message_composers.py new file mode 100644 index 00000000..f5bcdae2 --- /dev/null +++ b/RO-SDN-tapi/osm_rosdn_tapi/message_composers.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- + +####################################################################################### +# This file is part of OSM RO module +# +# Copyright ETSI Contributors and Others. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +####################################################################################### +# This work has been performed in the context of the TeraFlow Project - +# funded by the European Commission under Grant number 101015857 through the +# Horizon 2020 program. +# Contributors: +# - Lluis Gifre +# - Ricard Vilalta +####################################################################################### + +"""This file contains the helper methods used to compose the Transport API (TAPI) +messages sent by the TAPI WIM connector to the WIM.""" + + +import copy + +from .message_templates import ( + CREATE_TEMPLATE, + DELETE_TEMPLATE, + ENDPOINT_TEMPLATE, + REQUESTED_CAPACITY_TEMPLATE, + VLAN_CONSTRAINT_TEMPLATE, +) + + +def compose_requested_capacity(capacity, unit="GBPS"): + requested_capacity = copy.deepcopy(REQUESTED_CAPACITY_TEMPLATE) + total_size = requested_capacity["total-size"] + total_size["value"] = capacity + total_size["unit"] = "GBPS" + return requested_capacity + + +def compose_vlan_constraint(vlan_id): + vlan_constraint = copy.deepcopy(VLAN_CONSTRAINT_TEMPLATE) + vlan_constraint["vlan-id"] = vlan_id + return vlan_constraint + + +def compose_endpoint(sip): + sip_uuid = sip["uuid"] + endpoint = copy.deepcopy(ENDPOINT_TEMPLATE) + endpoint["service-interface-point"]["service-interface-point-uuid"] = sip_uuid + endpoint["layer-protocol-name"] = sip["layer-protocol-name"] + # TODO: implement smart selection of layer-protocol-qualifier instead of selecting first one available + supported_layer_protocol_qualifier = sip["supported-layer-protocol-qualifier"][0] + endpoint["layer-protocol-qualifier"] = supported_layer_protocol_qualifier + endpoint["local-id"] = sip_uuid + return endpoint + + +def compose_create_request( + service_uuid, + endpoints, + bidirectional=False, + requested_capacity=None, + vlan_constraint=None, +): + request = copy.deepcopy(CREATE_TEMPLATE) + con_svc = request["tapi-connectivity:connectivity-service"][0] + con_svc["uuid"] = service_uuid + con_svc["connectivity-direction"] = ( + "BIDIRECTIONAL" if bidirectional else "UNIDIRECTIONAL" + ) + con_svc["end-point"] = endpoints + if requested_capacity is not None: + con_svc["requested-capacity"] = requested_capacity + if vlan_constraint is not None: + con_svc["vlan-constraint"] = vlan_constraint + return request + + +def compose_delete_request(service_uuid): + request = copy.deepcopy(DELETE_TEMPLATE) + request["tapi-connectivity:input"]["uuid"] = service_uuid + return request