Feature 10937: Transport API (TAPI) WIM connector for RO
[osm/RO.git] / RO-SDN-tapi / osm_rosdn_tapi / message_composers.py
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 (file)
index 0000000..f5bcdae
--- /dev/null
@@ -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 <lluis.gifre@cttc.es>
+# - Ricard Vilalta <ricard.vilalta@cttc.es>
+#######################################################################################
+
+"""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