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