def any_up_msg_TAG_new(self,f,up_msg): f.up_step = up_msg.up_step self.logger.info("it's in " + str(f.up_step)) if(f.up_step == 0): fb_msg = FeedbackMessge(f.flow_id,self.local_id) self.send_fb_to_global(fb_msg) if(f.up_step == consts.TAG_POP_ADD): self.remove_tag_on_packets(f,up_msg) # elif(f.up_step == consts.TAG_PUSH_OLD): # self.add_tag_for_packets(f,up_msg) # elif(f.up_step == consts.TAG_OLD_TAG): # self.add_tag_for_entries(f,up_msg) elif(f.up_step == consts.TAG_NEW_TAG): self.add_tag_for_entries(f,up_msg) elif(f.up_step == consts.TAG_PUSH_NEW): # self.logger.info("--------yes in 3") self.add_tag_for_packets(f,up_msg) elif(f.up_step == consts.TAG_DEL_OLD): self.remove_flows(f,up_msg,2,None) elif(f.up_step == consts.TAG_MOD_NEW): self.add_no_tag_entries(f,up_msg) elif(f.up_step == consts.TAG_PUSH_DEL): self.remove_flows(f,up_msg,100,None) elif(f.up_step == consts.TAG_POP_DEL): self.remove_flows(f,up_msg,99,2)
def add_no_tag_entries(self,f,up_msg): self.logger.info(f.flow_id + "in tag " + str(f.up_step)) self.logger.info("add flows") f.up_step = up_msg.up_step version_tag = up_msg.version_tag to_barr_dp = [] if(len(up_msg.to_add) == 0): fb_msg = FeedbackMessge(f.flow_id,self.local_id) self.send_fb_to_global(fb_msg) return for a in up_msg.to_add: dplast,dpid,dpnext = a # print(dpid) if (dpid not in to_barr_dp): to_barr_dp.append(dpid) # print("haha" + str(self.datapaths)) datapath = self.datapaths[dpid] ofproto = datapath.ofproto parser = datapath.ofproto_parser match,match_reverse = self.make_match(parser,f) self.logger.info(str(match)) self.logger.info(str(match_reverse)) out = self.hosts[dpid][f.dst] if(dpid == dpnext) else self.neighbors[dpid][dpnext] out_reverse = self.hosts[dpid][f.src] if(dpid==dplast) else self.neighbors[dpid][dplast] actions = [parser.OFPActionOutput(out)] actions_reverse = [parser.OFPActionOutput(out_reverse)] priority = 2 self.add_flow(datapath,priority,match,actions) self.add_flow(datapath,priority,match_reverse,actions_reverse) self.logger.info(to_barr_dp) for dpid in to_barr_dp: self.send_barrier(self.datapaths[dpid],f.up_step,f.flow_id)
def any_up_msg_TAG(self,f,up_msg): f.up_step = up_msg.up_step f.version_tag = up_msg.version_tag self.logger.info(f.up_step) if(f.up_step == consts.TAG_ADD): self.logger.info("add flows") version_tag = f.version_tag to_barr_dp = [] for a in up_msg.to_add: dplast,dpid,dpnext = a # print(dpid) if (dpid not in to_barr_dp): to_barr_dp.append(dpid) # print("haha" + str(self.datapaths)) datapath = self.datapaths[dpid] ofproto = datapath.ofproto parser = datapath.ofproto_parser match,match_reverse = self.make_match(parser,f,version_tag = f.version_tag) self.logger.info(str(match)) self.logger.info(str(match_reverse)) out = self.hosts[dpid][f.dst] if(dpid == dpnext) else self.neighbors[dpid][dpnext] out_reverse = self.hosts[dpid][f.src] if(dpid==dplast) else self.neighbors[dpid][dplast] actions = [parser.OFPActionOutput(out)] actions_reverse = [parser.OFPActionOutput(out_reverse)] priority = 2 self.add_flow(datapath,priority,match,actions) self.add_flow(datapath,priority,match_reverse,actions_reverse) self.logger.info(to_barr_dp) for dpid in to_barr_dp: self.send_barrier(self.datapaths[dpid],f.up_step,f.flow_id) elif(f.up_step == consts.TAG_TAG): self.logger.info("-----------in tag tag") self.add_tag_for_packets(f,up_msg) elif(f.up_step == consts.TAG_DEL): to_barr_dp = [] if(len(up_msg.to_del) > 0): for d in up_msg.to_del: dplast,dpid,dpnext = d datapath = self.datapaths[dpid] if (dpid not in to_barr_dp): to_barr_dp.append(dpid) ofproto = datapath.ofproto parser = datapath.ofproto_parser match,match_reverse = self.make_match(parser,f,version_tag=None) priority = 2 self.remove_flow(datapath,priority,match) self.remove_flow(datapath,priority,match_reverse) for dpid in to_barr_dp: self.send_barrier(self.datapaths[dpid],f.up_step,f.flow_id) else: fb_msg = FeedbackMessge(f.flow_id,self.local_id) self.send_fb_to_global(fb_msg) elif(f.up_step == consts.TAG_MOD): self.logger.info("--------in tag mod------") elif(f.up_step == consts.TAG_UNTAG): pass
def process_info_msg(self, info_msg): if (info_msg.statusAsk): self.logger.info("---------get an Ask") fb_msg = FeedbackMessge(-1, self.local_id) fb_msg.statusAnswer = True fb_msg.status = ({ "buffer_remain": self.buf_size, "tcam_remain": self.dp_tcam_size }) self.logger.info(fb_msg) self.send_fb_to_global(fb_msg) self.logger.info("sent to global") return new_flows = info_msg.new_flows if (len(new_flows)): self.ana_new_flows(new_flows) for up_msg in info_msg.ums: self.any_up_msg(up_msg)
def _barrier_reply_handler(self, ev): print("---------------------------------------------------------") self.logger.info("hello this is reply for xid" + str(ev.msg.xid)) xid = ev.msg.xid flows_move_on = self.get_flows_move_on(xid) self.logger.info(self.xid_find_flow) # self.logger.info(self.flows["10.0.0.110.0.0.25001"].barrs_wait) self.logger.info(flows_move_on) for f in flows_move_on: self.clear_xid_flow(f.flow_id) f.barrs_wait = [] f.barrs_ok = 0 # self.xid_find_flow[xid].remove(f.flow_id) fb_msg = FeedbackMessge(f.flow_id, self.local_id) self.send_fb_to_global(fb_msg) self.logger.info("sent a fb msg ")
def any_up_msg_BUF(self, f, up_msg): # f = self.flows[up_msg.flow_id] f.up_step = up_msg.up_step to_barr_dp = [] self.logger.info("----------in any up msg buf-------------") self.logger.info(self.datapaths) self.logger.info(str(up_msg)) if (f.up_step == consts.BUF_DEL and len(up_msg.to_del) == 0): fb_msg = FeedbackMessge(f.flow_id, self.local_id) self.send_fb_to_global(fb_msg) return for d in up_msg.to_del: dplast, dpid, dpnext = d datapath = self.datapaths[dpid] if (dpid not in to_barr_dp): to_barr_dp.append(dpid) ofproto = datapath.ofproto parser = datapath.ofproto_parser match, match_reverse = self.make_match(parser, f, version_tag=None) priority = 2 self.remove_flow(datapath, priority, match) self.remove_flow(datapath, priority, match_reverse) for a in up_msg.to_add: dplast, dpid, dpnext = a print(dpid) if (dpid not in to_barr_dp): to_barr_dp.append(dpid) print("haha" + str(self.datapaths)) datapath = self.datapaths[dpid] ofproto = datapath.ofproto parser = datapath.ofproto_parser match, match_reverse = self.make_match(parser, f, version_tag=None) self.logger.info(str(match)) self.logger.info(str(match_reverse)) out = self.hosts[dpid][f.dst] if ( dpid == dpnext) else self.neighbors[dpid][dpnext] out_reverse = self.hosts[dpid][f.src] if ( dpid == dplast) else self.neighbors[dpid][dplast] actions = [parser.OFPActionOutput(out)] actions_reverse = [parser.OFPActionOutput(out_reverse)] priority = 2 self.add_flow(datapath, priority, match, actions) self.add_flow(datapath, priority, match_reverse, actions_reverse) for dpid in to_barr_dp: self.send_barrier(self.datapaths[dpid], f.up_step, f.flow_id)
def remove_flows(self,f,up_msg,priority=2,vid=None): self.logger.info(f.flow_id + "in tag " + str(f.up_step)) to_barr_dp = [] if(len(up_msg.to_del) > 0): for d in up_msg.to_del: dplast,dpid,dpnext = d datapath = self.datapaths[dpid] if (dpid not in to_barr_dp): to_barr_dp.append(dpid) ofproto = datapath.ofproto parser = datapath.ofproto_parser match,match_reverse = self.make_match(parser,f,vid) self.remove_flow(datapath,priority,match) self.remove_flow(datapath,priority,match_reverse) for dpid in to_barr_dp: self.send_barrier(self.datapaths[dpid],f.up_step,f.flow_id) else: fb_msg = FeedbackMessge(f.flow_id,self.local_id) self.send_fb_to_global(fb_msg)
def any_up_msg_RLS_BUF(self, f, up_msg): pop_key = f.flow_id hub.spawn(self.get_from_buffer, pop_key) fb_msg = FeedbackMessge(f.flow_id, self.local_id) self.send_fb_to_global(fb_msg)