def run_app2(): """ usage: curl -i -H "Content-Type: application/json" -X POST -d '{"test":"data"}' http://127.0.0.1:5000/pathfinder/run_app2 curl -i -H "Content-Type: application/json" -X POST --data-binary @/pathfinder/PFinput.json http://127.0.0.1:5000/pathfinder/run_app2 curl -i -H "Content-Type: application/json" -vX POST -d @PFinput.json http://127.0.0.1:5000/pathfinder/run_app2 """ if not request.json: flask_restful.abort(400) PFinput = request.json result = Pathfinder.pathfinder_algorithm(PFinput) #return json.dumps(result, indent=4), 200 return jsonify(PATH=result), 200
def provisioner(): """ *NOT DEFINED YET* usage: IP address needed (localhost not valid) curl -i -H "Content-Type: application/xml" -X POST --data-binary @/pathfinder/circuitRequest.xml http://127.0.0.1:5000/pathfinder/provisioner curl -i -H "Content-Type: application/xml" -vX POST -d @circuitRequest.xml http://127.0.0.1:5000/pathfinder/provisioner """ controllerIp = "127.0.0.1:8080" midSwitches = defaultdict(list) if request.headers['Content-Type'] == 'application/xml': #parse data from XML input to python parsed_data = BeautifulSoup(request.data) #E2E ip addresses and ports src_ip = parsed_data.source.address.string dst_ip = parsed_data.destination.address.string #src_port = parsed_data.source.linkport.string #considering #dst_port = parsed_data.destination.linkport.string #considering #label = parsed_data.label.string # requested QoS parameters max_delay = int(parsed_data.qos_policy.maxlatency.string) max_jitter = int(parsed_data.qos_policy.maxjitter.string) max_pLoss = int(parsed_data.qos_policy.maxpacketloss.string) min_band = int(parsed_data.qos_policy.minthroughput.string) #identify the request req_id = "FIBRE-test" #request input data #input_data = {"requestID": req_id, "ip-src": src_ip, "ip-dst": dst_ip, "src-port": src_port, "dst-port": dst_port, "bandwidth": min_band, "delay": max_delay, "packet-loss": max_pLoss, "jitter": max_jitter} input_data = {"requestID": req_id, "ip-src": src_ip, "ip-dst": dst_ip, "bandwidth": min_band, "delay": max_delay, "packet-loss": max_pLoss, "jitter": max_jitter} #recover topology file from: manually set or tester.py with open('PFinput_stats.json', 'r') as PFtopo: topofile = json.load(PFtopo) PFtopo.close() adapted_request = Adapter.adapter(controllerIp, input_data, topofile) with open('PFrequest.json', 'wb') as PFtester: json.dump(adapted_request, PFtester, indent=4) PFtester.close() print "Adapted request", adapted_request result = Pathfinder.pathfinder_algorithm(adapted_request) print result with open('path.json', 'wb') as PFpath: json.dump(result, PFpath, indent=4) PFpath.close() Forwarding.smart_flow_pusher(src_ip, dst_ip, controllerIp, result, min_band, queues) return jsonify(PATH=result), 200 else: flask_restful.abort(400)