def runTest(self): of_ports = pa_port_map.keys() of_ports.sort() self.assertTrue(len(of_ports) > 2, "Not enough ports for test") # For making the test simpler... ing_port = of_ports[0] egr_port = of_ports[1] mpls_label = 0xa5f05 # no specific meaning mpls_tc = 5 mpls_ttl = 129 pkt = testutils.simple_tcp_packet_w_mpls(mpls_label=mpls_label, mpls_tc=mpls_tc, mpls_ttl=mpls_ttl) match = parse.packet_to_flow_match(pkt) wildcards = 0 exp_pkt = testutils.simple_tcp_packet_w_mpls(ip_ttl=mpls_ttl-1) # Create parameters for each table act_list = [] next_avail = [] chk_expire = [] #Table 0 act = action.action_output() act.port = egr_port act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 1 act = action.action_dec_nw_ttl() act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 2 act = action.action_pop_mpls() act.ethertype = ETHERTYPE_IP act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 3 act = action.action_copy_ttl_in() act_list.append([act]) next_avail.append(False) chk_expire.append(False) write_action_test_multi_tables(self, ing_port, egr_port, match = match, wildcards = wildcards, act_list = act_list, next_avail = next_avail, chk_expire = chk_expire, pkt = pkt, exp_pkt = exp_pkt)
def mpls_pop_act_tests(parent): """ Test mpls pop action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ parent.assertTrue(((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range") sup_mpls_act = mpls_action_support_check(parent) if sup_mpls_act.has_key('sup_pop_mpls') == False: testutils.skip_message_emit(parent, "MPLS pop action test. POP not supported") return act = action.action_pop_mpls() act.ethertype = 0x8847 if parent.num_tags > 1 else 0x0800 if parent.num_tags == 0: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED exp_label = -1 #NOT EXPECTED/OUTER LABEL NOT EXPECTED exp_tc = 0 exp_ttl = 0 action_list = [act] testutils.flow_match_test_mpls(parent, pa_port_map, wildcards=0, mpls_label=parent.label, mpls_tc=parent.tc, mpls_label_int=parent.label_int, mpls_tc_int=parent.tc_int, label_match=parent.label_match, tc_match=parent.tc_match, dl_type_match=parent.dl_type_match, exp_mpls_label=exp_label, exp_mpls_tc=exp_tc, exp_mpls_ttl=exp_ttl, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, action_list=action_list, max_test=1)
def runTest(self): of_ports = pa_port_map.keys() of_ports.sort() self.assertTrue(len(of_ports) > 2, "Not enough ports for test") # For making the test simpler... ing_port = of_ports[0] egr_port = of_ports[1] pktlen = 104 mpls_label = 0xa5f05 # no specific meaning mpls_tc = 5 mpls_ttl = 129 pkt = testutils.simple_tcp_packet_w_mpls(pktlen=pktlen, mpls_label=mpls_label, mpls_tc=mpls_tc, mpls_ttl=mpls_ttl) match = parse.packet_to_flow_match(pkt) wildcards = 0 exp_pkt = testutils.simple_tcp_packet_w_mpls(pktlen=pktlen-4, ip_ttl=mpls_ttl) # Create parameters for each table act_list = [] next_avail = [] chk_expire = [] #Table 0 act = action.action_output() act.port = egr_port act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 1 act = action.action_pop_mpls() act.ethertype = ETHERTYPE_IP act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 2 act = action.action_copy_ttl_in() act_list.append([act]) next_avail.append(False) chk_expire.append(False) write_action_test_multi_tables(self, ing_port, egr_port, match = match, wildcards = wildcards, act_list = act_list, next_avail = next_avail, chk_expire = chk_expire, pkt = pkt, exp_pkt = exp_pkt)
def mpls_pop_act_tests(parent): """ Test mpls pop action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ parent.assertTrue(((parent.num_tags>=0) and (parent.num_tags<=2)), "Parameter num_tags not within an acceptable range") sup_mpls_act = mpls_action_support_check(parent) if sup_mpls_act.has_key('sup_pop_mpls') == False: testutils.skip_message_emit(parent, "MPLS pop action test. POP not supported") return act = action.action_pop_mpls() act.ethertype = 0x8847 if parent.num_tags > 1 else 0x0800 if parent.num_tags == 0: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED exp_label = -1 #NOT EXPECTED/OUTER LABEL NOT EXPECTED exp_tc = 0 exp_ttl = 0 action_list=[act] testutils.flow_match_test_mpls(parent, pa_port_map, wildcards=0, mpls_label=parent.label, mpls_tc=parent.tc, mpls_label_int=parent.label_int, mpls_tc_int=parent.tc_int, label_match=parent.label_match, tc_match=parent.tc_match, dl_type_match=parent.dl_type_match, exp_mpls_label=exp_label, exp_mpls_tc=exp_tc, exp_mpls_ttl=exp_ttl, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, action_list=action_list, max_test=1)
def mpls_pop_two_tables_tests(parent, test_condition=0, match_exp=True): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 label = random.randint(16, 1048574) tc = random.randint(0, 6) ttl = 64 ip_ttl = 192 if (test_condition == 0): label_int = -1 tc_int = 0 ttl_int = 0 else: #test_condition == 1 label_int = label + 1 tc_int = tc + 1 ttl_int = ttl + 2 # Match condition on TBL0 label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Create action_list for TBL0 act = action.action_pop_mpls() if test_condition == 0: act.ethertype = ETHERTYPE_IP else: #test_condition == 1 act.ethertype = ETHERTYPE_MPLS action_list_tbl0 = [act] # Create matching value for TBL1 if (match_exp): if (test_condition == 0): label_match_tbl1 = 0 tc_match_tbl1 = 0 dl_type_match_tbl1 = ETHERTYPE_IP else: #test_condition == 1 label_match_tbl1 = label_int tc_match_tbl1 = tc_int dl_type_match_tbl1 = ETHERTYPE_MPLS else: label_match_tbl1 = label tc_match_tbl1 = tc dl_type_match_tbl1 = ETHERTYPE_MPLS # Output action for table1 will be set in the framework # One-tag-removed packet expected exp_label = -1 exp_tc = 0 exp_ttl = 0 exp_ttl_int = ttl_int exp_ip_ttl = ip_ttl flow_match_test_mpls_two_tables(parent, pa_port_map, wildcards=wildcards, mpls_label=label, mpls_tc=tc, mpls_ttl=ttl, ip_ttl=ip_ttl, mpls_label_int=label_int, mpls_tc_int=tc_int, mpls_ttl_int=ttl_int, label_match_tbl0=label_match_tbl0, tc_match_tbl0=tc_match_tbl0, dl_type_match_tbl0=dl_type_match_tbl0, action_list_tbl0=action_list_tbl0, match_exp_tbl0=True, label_match_tbl1=label_match_tbl1, tc_match_tbl1=tc_match_tbl1, dl_type_match_tbl1=dl_type_match_tbl1, match_exp_tbl1=match_exp, exp_mpls_label=exp_label, exp_mpls_tc=exp_tc, exp_mpls_ttl_int=exp_ttl_int, exp_ip_ttl=exp_ip_ttl, max_test=1)
def mpls_pop_two_tables_tests(parent, test_condition=0, match_exp=True): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 label = random.randint(16, 1048574) tc = random.randint(0, 6) ttl = 64 ip_ttl = 192 if (test_condition == 0): label_int = -1 tc_int = 0 ttl_int = 0 else: #test_condition == 1 label_int = label + 1 tc_int = tc + 1 ttl_int = ttl + 2 # Match condition on TBL0 label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Create action_list for TBL0 act = action.action_pop_mpls() if test_condition == 0: act.ethertype = ETHERTYPE_IP else: #test_condition == 1 act.ethertype = ETHERTYPE_MPLS action_list_tbl0 = [act] # Create matching value for TBL1 if (match_exp): if (test_condition == 0): label_match_tbl1 = 0 tc_match_tbl1 = 0 dl_type_match_tbl1 = ETHERTYPE_IP else: #test_condition == 1 label_match_tbl1 = label_int tc_match_tbl1 = tc_int dl_type_match_tbl1 = ETHERTYPE_MPLS else: label_match_tbl1 = label tc_match_tbl1 = tc dl_type_match_tbl1 = ETHERTYPE_MPLS # Output action for table1 will be set in the framework # One-tag-removed packet expected exp_label = -1 exp_tc = 0 exp_ttl = 0 exp_ttl_int = ttl_int exp_ip_ttl = ip_ttl flow_match_test_mpls_two_tables(parent, pa_port_map, wildcards=wildcards, mpls_label=label, mpls_tc=tc, mpls_ttl=ttl, ip_ttl=ip_ttl, mpls_label_int=label_int, mpls_tc_int=tc_int, mpls_ttl_int=ttl_int, label_match_tbl0=label_match_tbl0, tc_match_tbl0=tc_match_tbl0, dl_type_match_tbl0=dl_type_match_tbl0, action_list_tbl0 = action_list_tbl0, match_exp_tbl0=True, label_match_tbl1=label_match_tbl1, tc_match_tbl1=tc_match_tbl1, dl_type_match_tbl1=dl_type_match_tbl1, match_exp_tbl1=match_exp, exp_mpls_label=exp_label, exp_mpls_tc=exp_tc, exp_mpls_ttl_int = exp_ttl_int, exp_ip_ttl=exp_ip_ttl, max_test=1)