Example #1
0
    def runTest(self):
    
        of_ports = rtp_port_map.keys()
        of_ports.sort()
        ing_port = of_ports[0]
        egr_port = of_ports[3]
        
        rtp_logger.info("Running " + str(self))
        
        rtp_logger.info("Removing all flows")
        testutils.delete_all_flows(self.controller, rtp_logger)
        testutils.delete_all_groups(self.controller, rtp_logger)
        
        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 10, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[1])
            ]) ,
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_SET_DL_DST, dl_dst='00:00:00:00:00:02'),
                groups.create_action(action= ofp.OFPAT_SET_NW_DST, nw_dst='192.168.3.1'),
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[2])
            ]) 
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')
        
        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 20, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[1])
            ]) 
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')
        
        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_SELECT, group_id = 30, buckets = [
            groups.create_bucket(1, 0, 0, [
                groups.create_action(action= ofp.OFPAT_GROUP, group_id = 10)
            ]) ,
            groups.create_bucket(1, 0, 0, [
                groups.create_action(action= ofp.OFPAT_GROUP, group_id = 20)
            ])
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')
        
        request = message.flow_mod()

        pkt = testutils.simple_rtp_packet()
        # Gerar o flow_mod em cima do pacote RTP (desconsidera a sequencia do RTP)
        flow_add_msg = \
        groups.create_flow_msg(packet = pkt, in_port = of_ports[0], apply_action_list = [
            groups.create_action(action = ofp.OFPAT_GROUP, group_id = 30),
        ])
        
        rv = self.controller.message_send(flow_add_msg)
        self.assertTrue(rv != -1, "Error installing flow mod")
        
        idx = 0
        
        while idx < 100 :
            ingress_port = of_ports[0]
            
            pkt = testutils.simple_rtp_packet(rtp_sequence= idx)
            
            rtp_logger.info("Sending packet to dp port " + 
                               str(ingress_port))
            self.dataplane.send(ingress_port, str(pkt))
#            if idx%2 == 0:
            
            idx = idx + 1
#            yes_ports = set([egress_port1, egress_port2])
#            no_ports = set(of_ports).difference(yes_ports)

#            testutils.receive_pkt_check(self.dataplane, pkt, yes_ports, no_ports, self, rtp_logger)

        testutils.delete_all_flows(self.controller, rtp_logger)
        testutils.delete_all_groups(self.controller, rtp_logger)
Example #2
0
    def runTest(self):
        #self.clean_switch()
        #print("AsyncGroupDelNoFlowRemoved")
        #"verifying without set_async, switch will send flow removed"
        #step 1-1:controller sends set_async msg
        async_logger.info("Sending set_async")
        mask = 1 << ofp.OFPRR_GROUP_DELETE
        request_set = create_set_async(flow_rm_mstr = mask)
        testutils.ofmsg_send(self, request_set)
        #result 1-1: contrller sends msg successfully
        
        "step 2-1:clear all flow entry"
        testutils.delete_all_flows(self.controller, async_logger)
        response,_ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        while response != None:
            response,_ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 1)

        "step 3-1:add goup entry"
        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 10, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= 1)
            ])
        ])
        testutils.ofmsg_send(self, group_add_msg)

        "step 4-1: add an flow entry ,install default mismatch flow entry;"
        pkt = testutils.simple_tcp_packet()
        act = groups.create_action(action= ofp.OFPAT_GROUP, group_id = 10)

        request = testutils.flow_msg_create(self, pkt, action_list = [act],
                            table_id = testutils.WC_L3_TABLE, check_expire=True)
        request.cookie = random.randint(0,0xffffffffffffffff)
        testutils.flow_msg_install(self, request)  
        
        "step 5-1: delete goup entry"
        group_del_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_DELETE, ofp.OFPGT_ALL, group_id = 10, buckets = [
        ])
        testutils.ofmsg_send(self, group_del_msg)

        "step 5-1:receive flow removed msg"
        (response, _) = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)        
        self.assertTrue(response is not None,  'Receive flow removed message ')
        self.assertTrue(response.reason  == ofp.OFPRR_GROUP_DELETE,
                                        'Not OFPRR_DELETE reason')
        self.assertTrue(response.cookie  == request.cookie,
                                        'Cookie is not equal')
        #self.assertTrue(response.match_fields  == request.match_fields,
        #                                'Match_fields is not equal')
        
        #"verifying with set_async, switch will not send flow removed"        
        "step 1-2:controller sends set_async msg"
        async_logger.info("Sending set_async")
        mask = 0xffffffff ^ (1 << ofp.OFPRR_GROUP_DELETE)
        request_set = create_set_async(flow_rm_mstr = mask)
        testutils.ofmsg_send(self, request_set)
        "result 1-2: contrller sends msg successfully"

        
        "step 2-2:clear all flow entry"
        testutils.delete_all_flows(self.controller, async_logger)
        response,_ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        while response != None:
            response,_ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 1)

        "step 3-2:add goup entry"
        testutils.ofmsg_send(self, group_add_msg)

        "step 4-2: add an flow entry ,install default mismatch flow entry;"
        testutils.flow_msg_install(self, request)        
        
        "step 5-2: delete goup entry"
        testutils.ofmsg_send(self, group_del_msg)

        "step 6-2: receive no flow removed msg"
        (response, _) = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)        
        self.assertTrue(response is None,  'Receive flow removed message ')

        msg = create_set_async()
        set_async_verify(self, msg)
Example #3
0
    def runTest(self):

        of_ports = rtp_port_map.keys()
        of_ports.sort()
        ing_port = of_ports[0]
        egr_port = of_ports[3]

        rtp_logger.info("Running " + str(self))

        rtp_logger.info("Removing all flows")
        testutils.delete_all_flows(self.controller, rtp_logger)
        testutils.delete_all_groups(self.controller, rtp_logger)

        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 10, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[1])
            ]) ,
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_SET_DL_DST, dl_dst='00:00:00:00:00:02'),
                groups.create_action(action= ofp.OFPAT_SET_NW_DST, nw_dst='192.168.3.1'),
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[2])
            ])
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')

        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 20, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= of_ports[1])
            ])
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')

        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_SELECT, group_id = 30, buckets = [
            groups.create_bucket(1, 0, 0, [
                groups.create_action(action= ofp.OFPAT_GROUP, group_id = 10)
            ]) ,
            groups.create_bucket(1, 0, 0, [
                groups.create_action(action= ofp.OFPAT_GROUP, group_id = 20)
            ])
        ])

        self.send_ctrl_exp_noerror(group_add_msg, 'group add')

        request = message.flow_mod()

        pkt = testutils.simple_rtp_packet()
        # Gerar o flow_mod em cima do pacote RTP (desconsidera a sequencia do RTP)
        flow_add_msg = \
        groups.create_flow_msg(packet = pkt, in_port = of_ports[0], apply_action_list = [
            groups.create_action(action = ofp.OFPAT_GROUP, group_id = 30),
        ])

        rv = self.controller.message_send(flow_add_msg)
        self.assertTrue(rv != -1, "Error installing flow mod")

        idx = 0

        while idx < 100:
            ingress_port = of_ports[0]

            pkt = testutils.simple_rtp_packet(rtp_sequence=idx)

            rtp_logger.info("Sending packet to dp port " + str(ingress_port))
            self.dataplane.send(ingress_port, str(pkt))
            #            if idx%2 == 0:

            idx = idx + 1


#            yes_ports = set([egress_port1, egress_port2])
#            no_ports = set(of_ports).difference(yes_ports)

#            testutils.receive_pkt_check(self.dataplane, pkt, yes_ports, no_ports, self, rtp_logger)

        testutils.delete_all_flows(self.controller, rtp_logger)
        testutils.delete_all_groups(self.controller, rtp_logger)
Example #4
0
    def runTest(self):
        #self.clean_switch()
        #print("AsyncGroupDelNoFlowRemoved")
        #"verifying without set_async, switch will send flow removed"
        #step 1-1:controller sends set_async msg
        async_logger.info("Sending set_async")
        mask = 1 << ofp.OFPRR_GROUP_DELETE
        request_set = create_set_async(flow_rm_mstr=mask)
        testutils.ofmsg_send(self, request_set)
        #result 1-1: contrller sends msg successfully

        "step 2-1:clear all flow entry"
        testutils.delete_all_flows(self.controller, async_logger)
        response, _ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        while response != None:
            response, _ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 1)

        "step 3-1:add goup entry"
        group_add_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_ADD, ofp.OFPGT_ALL, group_id = 10, buckets = [
            groups.create_bucket(0, 0, 0, [
                groups.create_action(action= ofp.OFPAT_OUTPUT, port= 1)
            ])
        ])
        testutils.ofmsg_send(self, group_add_msg)

        "step 4-1: add an flow entry ,install default mismatch flow entry;"
        pkt = testutils.simple_tcp_packet()
        act = groups.create_action(action=ofp.OFPAT_GROUP, group_id=10)

        request = testutils.flow_msg_create(self,
                                            pkt,
                                            action_list=[act],
                                            table_id=testutils.WC_L3_TABLE,
                                            check_expire=True)
        request.cookie = random.randint(0, 0xffffffffffffffff)
        testutils.flow_msg_install(self, request)

        "step 5-1: delete goup entry"
        group_del_msg = \
        groups.create_group_mod_msg(ofp.OFPGC_DELETE, ofp.OFPGT_ALL, group_id = 10, buckets = [
        ])
        testutils.ofmsg_send(self, group_del_msg)

        "step 5-1:receive flow removed msg"
        (response, _) = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        self.assertTrue(response is not None, 'Receive flow removed message ')
        self.assertTrue(response.reason == ofp.OFPRR_GROUP_DELETE,
                        'Not OFPRR_DELETE reason')
        self.assertTrue(response.cookie == request.cookie,
                        'Cookie is not equal')
        #self.assertTrue(response.match_fields  == request.match_fields,
        #                                'Match_fields is not equal')

        #"verifying with set_async, switch will not send flow removed"
        "step 1-2:controller sends set_async msg"
        async_logger.info("Sending set_async")
        mask = 0xffffffff ^ (1 << ofp.OFPRR_GROUP_DELETE)
        request_set = create_set_async(flow_rm_mstr=mask)
        testutils.ofmsg_send(self, request_set)
        "result 1-2: contrller sends msg successfully"

        "step 2-2:clear all flow entry"
        testutils.delete_all_flows(self.controller, async_logger)
        response, _ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        while response != None:
            response, _ = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 1)

        "step 3-2:add goup entry"
        testutils.ofmsg_send(self, group_add_msg)

        "step 4-2: add an flow entry ,install default mismatch flow entry;"
        testutils.flow_msg_install(self, request)

        "step 5-2: delete goup entry"
        testutils.ofmsg_send(self, group_del_msg)

        "step 6-2: receive no flow removed msg"
        (response, _) = self.controller.poll(ofp.OFPT_FLOW_REMOVED, 2)
        self.assertTrue(response is None, 'Receive flow removed message ')

        msg = create_set_async()
        set_async_verify(self, msg)