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
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
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
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