def get_by_filter(self, transform_to_abstract_flow=False): with db_session() as db: flows = db.query(OvsFlow) \ .filter(OvsFlow.id == self.id if self.id != None else True) \ .filter(OvsFlow.nw_src == self.nw_src if self.nw_src != None else True) \ .filter(OvsFlow.nw_dst == self.nw_dst if self.nw_dst != None else True) \ .filter(OvsFlow.cookie == self.cookie if self.cookie != None else True) \ .filter(OvsFlow.priority == self.priority if self.priority != None else True) \ .filter(OvsFlow.table == self.table if self.table != None else True) \ .filter(OvsFlow.protocol == self.protocol if self.protocol != None else True) \ .filter(OvsFlow.tcp_src == self.tcp_src if self.tcp_src != None else True) \ .filter(OvsFlow.tcp_dst == self.tcp_dst if self.tcp_dst != None else True) \ .filter(OvsFlow.udp_src == self.udp_src if self.udp_src != None else True) \ .filter(OvsFlow.udp_dst == self.udp_dst if self.udp_dst != None else True) \ .all() #TODO: Needed if @property is removed - TO investigate why flows_json = [] if transform_to_abstract_flow is False: for flow in flows: # print(flow) flow_json = flow.serialize flows_json.append(flow_json) else: for flow in flows: flow_json = flow.serialize_as_abstract print(flow_json) flows_json.append(flow_json) db.commit() return flows_json
def get_by_filter(self): with db_session() as db: flows = db.query(Flow) \ .filter(Flow.id == self.id if self.id != None else True) \ .filter(Flow.nw_src == self.nw_src if self.nw_src != None else True) \ .filter(Flow.nw_dst == self.nw_dst if self.nw_dst != None else True) \ .filter(Flow.cookie == self.cookie if self.cookie != None else True) \ .filter(Flow.priority == self.priority if self.priority != None else True) \ .filter(Flow.table == self.table if self.table != None else True) \ .filter(Flow.protocol == self.protocol if self.protocol != None else True) \ .filter(Flow.tcp_src == self.tcp_src if self.tcp_src != None else True) \ .filter(Flow.tcp_dst == self.tcp_dst if self.tcp_dst != None else True) \ .filter(Flow.udp_src == self.udp_src if self.udp_src != None else True) \ .filter(Flow.udp_dst == self.udp_dst if self.udp_dst != None else True) \ .all() ## Needed if @property is removed - TO investigate why flows_json = [] for flow in flows: print(flow) flow_json = flow.serialize flows_json.append(flow_json) db.commit() return flows_json
def set_flows_performance(self): with db_session() as db: for abstract_flow in self.abstract_flows: abstract_flow.ovs_flow.apply() db.execute(OvsFlow.OvsFlow.__table__.insert(), [{ "nw_src": abstract_flow.ovs_flow.nw_src, "nw_dst": abstract_flow.ovs_flow.nw_dst, "n_packets": abstract_flow.ovs_flow.n_packets, "n_bytes": abstract_flow.ovs_flow.n_bytes, "cookie": abstract_flow.ovs_flow.cookie, "idle_age": abstract_flow.ovs_flow.idle_age, "duration": abstract_flow.ovs_flow.duration, "priority": abstract_flow.ovs_flow.priority, "table": abstract_flow.ovs_flow.table, "protocol": abstract_flow.ovs_flow.protocol, "tcp_src": abstract_flow.ovs_flow.tcp_src, "tcp_dst": abstract_flow.ovs_flow.tcp_dst, "udp_src": abstract_flow.ovs_flow.udp_src, "udp_dst": abstract_flow.ovs_flow.udp_dst, "actions": abstract_flow.ovs_flow.actions } for abstract_flow in self.abstract_flows]) db.commit() return "Flows added!"
def deleteOvsFlow(self, json_content): with db_session() as db: # Delete from DB ovs_flow = db.query(OvsFlow.OvsFlow).get(json_content["id"]) ovs_flow.delete() ovs_flow.delete_db(db) db.commit() return {"response": "delete_done"}
def deleteFlow(self, json_content): flow = Flow.Flow() flow.id = json_content["id"] with db_session() as db: # flow.delete() # Delete from DB flow.delete_db(db) db.commit() return {"response": "delete_done"}
def set_flows(self): print(self.flows) with db_session() as db: for flow in self.flows: flow.apply() new_id = flow.create_db(db) print(new_id) db.commit() return "True"
def deleteAllOvsFlows(self): with db_session() as db: ovs_flow = OvsFlow.OvsFlow() flows = ovs_flow.get_by_filter_obj(db) for ovs_flow in flows: # Delete from DB ovs_flow.delete() num_rows_deleted = db.query(OvsFlow.OvsFlow).delete() db.commit() return {"num_rows_deleted": num_rows_deleted}
def deleteFlow(self, json_content): with db_session() as db: # Delete from DB abstract_flow = db.query(AbstractFlow.AbstractFlow).get( json_content["id"]) if abstract_flow.actions == "drop": abstract_flow.ovs_flow.delete() elif abstract_flow.actions == "accept": abstract_flow.traffic_control_flow.delete() abstract_flow.delete_db(db) db.commit() return {"response": "delete_done"}
def deleteAllFlows(self): with db_session() as db: abstract_flow = AbstractFlow.AbstractFlow() flows = abstract_flow.get_by_filter_obj(db) for abstract_flow in flows: # Delete from DB if abstract_flow.actions == "drop": abstract_flow.ovs_flow.delete() elif abstract_flow.actions == "accept": abstract_flow.traffic_control_flow.delete() abstract_flow.delete_db(db) db.commit() return {"response": "delete_done"}
def set_flows(self): print(self.abstract_flows) new_ids = [] with db_session() as db: for abstract_flow in self.abstract_flows: new_id = abstract_flow.create_db(db) if abstract_flow.actions == "drop": abstract_flow.ovs_flow.apply() elif abstract_flow.actions == "accept": abstract_flow.traffic_control_flow.apply() print(new_id) new_ids.append({"id": new_id}) db.commit() return new_ids
def get_by_filter(self): with db_session() as db: traffic_control_flows = db.query(TrafficControlFlow) \ .filter(TrafficControlFlow.id == self.id if self.id != None else True) \ .filter(TrafficControlFlow.ip_src == self.ip_src if self.ip_src != None else True) \ .filter(TrafficControlFlow.ip_dst == self.ip_dst if self.ip_dst != None else True) \ .filter(TrafficControlFlow.protocol == self.protocol if self.protocol != None else True) \ .filter(TrafficControlFlow.port_src == self.port_src if self.port_src != None else True) \ .filter(TrafficControlFlow.port_dst == self.port_dst if self.port_dst != None else True) \ .filter(TrafficControlFlow.rate_limit == self.rate_limit if self.rate_limit != None else True) \ .filter(TrafficControlFlow.actions == self.actions if self.actions != None else True) \ .all() ## Needed if @property is removed - TO investigate why traffic_control_flows_dict = [] for traffic_control_flow in traffic_control_flows: print(traffic_control_flow) traffic_control_flow_dict = traffic_control_flow.serialize traffic_control_flows_dict.append(traffic_control_flow_dict) db.commit() return traffic_control_flows_dict
def get_by_filter(self): with db_session() as db: flows = db.query(AbstractFlow) \ .filter(AbstractFlow.id == self.id if self.id != None else True) \ .filter(AbstractFlow.ip_src == self.ip_src if self.ip_src != None else True) \ .filter(AbstractFlow.ip_dst == self.ip_dst if self.ip_dst != None else True) \ .filter(AbstractFlow.priority == self.priority if self.priority != None else True) \ .filter(AbstractFlow.protocol == self.protocol if self.protocol != None else True) \ .filter(AbstractFlow.port_src == self.port_src if self.port_src != None else True) \ .filter(AbstractFlow.port_dst == self.port_dst if self.port_dst != None else True) \ .filter(AbstractFlow.rate_limit == self.rate_limit if self.rate_limit != None else True) \ .filter(AbstractFlow.actions == self.actions if self.actions != None else True) \ .all() ## Needed if @property is removed - TO investigate why flows_dict = [] for flow in flows: print(flow) flow_dict = flow.serialize flows_dict.append(flow_dict) db.commit() return flows_dict