X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Frest%2Fnetwork.py;h=e766e625c012b73aa4ebe2821f284915da376e7b;hb=e0796231bf6fd5b7d09d4a850227be7bc9bbdc6a;hp=eb31c3c897f9a5f80283183d1348520febca5bd2;hpb=79ef6aee3dc52f49d1261e40ec5f258fb4372a1e;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py index eb31c3c..e766e62 100755 --- a/src/emuvim/api/rest/network.py +++ b/src/emuvim/api/rest/network.py @@ -25,6 +25,13 @@ the Horizon 2020 and 5G-PPP programmes. The authors would like to acknowledge the contributions of their colleagues of the SONATA partner consortium (www.sonata-nfv.eu). """ + +""" +Distributed Cloud Emulator (dcemulator) +Networking and monitoring functions +(c) 2015 by Steven Van Rossem +""" + import logging from flask_restful import Resource from flask import request @@ -32,6 +39,9 @@ import json logging.basicConfig(level=logging.INFO) +CORS_HEADER = {'Access-Control-Allow-Origin': '*'} + +# the global net is set from the topology file, and connected via connectDCNetwork function in rest_api_endpoint.py net = None @@ -46,31 +56,53 @@ class NetworkAction(Resource): :param match: OpenFlow match format of the flow entry :param bidirectional: boolean value if the link needs to be implemented from src to dst and back :param cookie: cookie value, identifier of the flow entry to be installed. + :param priority: integer indicating the priority of the flow entry + :param skip_vlan_tag: boolean to indicate whether a new vlan tag should be created for this chain + :param monitor: boolean to indicate whether a new vlan tag should be created for this chain + :param monitor_placement: 'tx'=place the monitoring flowrule at the beginning of the chain, 'rx'=place at the end of the chain :return: message string indicating if the chain action is succesful or not """ global net - def put(self, vnf_src_name, vnf_dst_name): + def put(self): logging.debug("REST CALL: network chain add") command = 'add-flow' - return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command) + return self._NetworkAction(command=command) - def delete(self, vnf_src_name, vnf_dst_name): + def delete(self): logging.debug("REST CALL: network chain remove") command = 'del-flows' - return self._NetworkAction(vnf_src_name, vnf_dst_name, command=command) + return self._NetworkAction(command=command) - def _NetworkAction(self, vnf_src_name, vnf_dst_name, command=None): + def _NetworkAction(self, command=None): # call DCNetwork method, not really datacenter specific API for now... # no check if vnfs are really connected to this datacenter... try: - vnf_src_interface = json.loads(request.json).get("vnf_src_interface") - vnf_dst_interface = json.loads(request.json).get("vnf_dst_interface") - weight = json.loads(request.json).get("weight") - match = json.loads(request.json).get("match") - bidirectional = json.loads(request.json).get("bidirectional") - cookie = json.loads(request.json).get("cookie") + # check if json data is a dict + data = request.args + # try json payload + if data is None: + data = request.json + # then no data + if data is None: + data = {} + elif type(data) is not dict: + data = json.loads(request.json) + + vnf_src_name = data.get("vnf_src_name") + vnf_dst_name = data.get("vnf_dst_name") + vnf_src_interface = data.get("vnf_src_interface") + vnf_dst_interface = data.get("vnf_dst_interface") + weight = data.get("weight") + match = data.get("match") + bidirectional = data.get("bidirectional") + cookie = data.get("cookie") + priority = data.get("priority") + skip_vlan_tag = data.get("skip_vlan_tag") + monitor = data.get("monitor") + monitor_placement = data.get("monitor_placement") + c = net.setChain( vnf_src_name, vnf_dst_name, vnf_src_interface=vnf_src_interface, @@ -79,9 +111,13 @@ class NetworkAction(Resource): weight=weight, match=match, bidirectional=bidirectional, - cookie=cookie) + cookie=cookie, + priority=priority, + skip_vlan_tag=skip_vlan_tag, + monitor=monitor, + monitor_placement=monitor_placement) # return setChain response - return str(c), 200 + return str(c), 200, CORS_HEADER except Exception as ex: logging.exception("API error.") - return ex.message, 500 \ No newline at end of file + return ex.message, 500, CORS_HEADER