Beispiel #1
0
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
Beispiel #2
0
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)