예제 #1
0
def delete_sff(sffname):
    """
    Deletes SFF from topology, kills associated thread and if necessary remove
    all SFPs that depend on it

    :param sffname: SFF name
    :type sffname: str

    """
    status_code = 204
    local_sff_topo = sfc_globals.get_sff_topo()
    local_sff_threads = sfc_globals.get_sff_threads()
    logger.info("Received request from ODL to delete SFF ...")
    try:
        if sffname in local_sff_threads.keys():
            stop_sff(sffname)

        if sffname in sfc_globals.get_my_sff_name():
            sfc_globals.reset_path()
            sfc_globals.reset_sff_data_plane_path()

        local_sff_topo.pop(sffname)

    except KeyError:
        logger.warning('SFF name %s not found', sffname)
        status_code = 404

    return '', status_code
예제 #2
0
def create_sff(sffname):
    """
    This function creates a SFF on-the-fly when it receives a PUT request from
    ODL. The SFF runs on a separate thread. If a SFF thread with same name
    already exist it is killed before a new one is created. This happens when a
    SFF is modified or recreated

    :param sffname: SFF name
    :type sffname: str

    """
    if not flask.request.json:
        flask.abort(400)

    logger.info("Received request from ODL to create SFF ...")
    local_sff_threads = sfc_globals.get_sff_threads()
    if sffname in local_sff_threads.keys():
        stop_sff(sffname)

    r_json = flask.request.get_json()
    with open("jsonputSFF.txt", "w") as outfile:
        json.dump(r_json, outfile)
    local_sff_topo = sfc_globals.get_sff_topo()

    local_sff_topo[sffname] = r_json['service-function-forwarder'][0]
    sff_port = (local_sff_topo[sffname]['sff-data-plane-locator'][0]['data-plane-locator']['port'])
    sff_ip = (local_sff_topo[sffname]['sff-data-plane-locator'][0]['data-plane-locator']['ip'])
    nfq_classifier.set_fwd_socket(sff_ip)
    start_sff(sffname, sff_ip, sff_port)

    return flask.jsonify({'sff': sfc_globals.get_sff_topo()}), 201
예제 #3
0
def create_sff(sffname):
    """
    This function creates a SFF on-the-fly when it receives a PUT request from
    ODL. The SFF runs on a separate thread. If a SFF thread with same name
    already exist it is killed before a new one is created. This happens when a
    SFF is modified or recreated

    :param sffname: SFF name
    :type sffname: str

    """
    if not flask.request.json:
        flask.abort(400)

    logger.info("Received request from ODL to create SFF ...")
    local_sff_threads = sfc_globals.get_sff_threads()
    if sffname in local_sff_threads.keys():
        stop_sff(sffname)

    r_json = flask.request.get_json()
    with open("jsonputSFF.txt", "w") as outfile:
        json.dump(r_json, outfile)
    local_sff_topo = sfc_globals.get_sff_topo()

    local_sff_topo[sffname] = r_json['service-function-forwarder'][0]
    sff_port = (local_sff_topo[sffname]['sff-data-plane-locator'][0]
                ['data-plane-locator']['port'])
    sff_ip = (local_sff_topo[sffname]['sff-data-plane-locator'][0]
              ['data-plane-locator']['ip'])
    nfq_classifier.set_fwd_socket(sff_ip)
    start_sff(sffname, sff_ip, sff_port)

    return flask.jsonify({'sff': sfc_globals.get_sff_topo()}), 201
예제 #4
0
def delete_sff(sffname):
    """
    Deletes SFF from topology, kills associated thread and if necessary remove
    all SFPs that depend on it

    :param sffname: SFF name
    :type sffname: str

    """
    status_code = 204
    local_sff_topo = sfc_globals.get_sff_topo()
    local_sff_threads = sfc_globals.get_sff_threads()
    logger.info("Received request from ODL to delete SFF ...")
    try:
        if sffname in local_sff_threads.keys():
            stop_sff(sffname)

        if sffname in sfc_globals.get_my_sff_name():
            sfc_globals.reset_path()
            sfc_globals.reset_sff_data_plane_path()

        local_sff_topo.pop(sffname)

    except KeyError:
        logger.warning('SFF name %s not found', sffname)
        status_code = 404

    return '', status_code
예제 #5
0
파일: sfc_agent.py 프로젝트: Kibrom1/sfc
def create_sff(sffname):
    """
    This function creates a SFF on-the-fly when it receives a PUT request from
    ODL. The SFF runs on a separate thread. If a SFF thread with same name
    already exist it is killed before a new one is created. This happens when a
    SFF is modified or recreated

    :param sffname: SFF name
    :type sffname: str

    """
    if not flask.request.json:
        flask.abort(400)

    local_sff_threads = sfc_globals.get_sff_threads()
    if sffname in local_sff_threads.keys():
        stop_sff(sffname)

    r_json = flask.request.get_json()
    local_sff_topo = sfc_globals.get_sff_topo()

    local_sff_topo[sffname] = r_json['service-function-forwarder'][0]
    sff_port = (local_sff_topo[sffname]['sff-data-plane-locator']
                [0]
                ['data-plane-locator']
                ['port'])

    start_sff(sffname, "0.0.0.0", sff_port)

    return flask.jsonify({'sff': sfc_globals.get_sff_topo()}), 201