Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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 ")
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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)