def mpls_set_ttl_act_tests(parent): """ Test mpls set_ttl 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_set_mpls_ttl') == False: testutils.skip_message_emit(parent, "MPLS set_ttl action test. SET_TTL not supported") return act = action.action_set_mpls_ttl() exp_label = parent.label exp_tc = parent.tc act.mpls_ttl = parent.ttl + 2 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 exp_ttl = parent.ttl else: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED exp_ttl = act.mpls_ttl action_list=[act] testutils.flow_match_test_mpls(parent, pa_port_map, wildcards=0, mpls_label=parent.label, mpls_tc=parent.tc, mpls_ttl=parent.ttl, mpls_label_int=parent.label_int, mpls_tc_int=parent.tc_int, mpls_ttl_int=parent.ttl_int, ip_ttl=parent.ip_ttl, 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 new_mpls_ttl = mpls_ttl+1 exp_pkt = testutils.simple_tcp_packet_w_mpls(pktlen=pktlen, mpls_label=mpls_label, mpls_tc=mpls_tc, mpls_ttl=new_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_set_mpls_ttl() act.mpls_ttl = new_mpls_ttl act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 2 act = action.action_dec_mpls_ttl() 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_multipush2_act_tests(parent, test_condition=0): """ Test mpls push and set actions 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_push_mpls') == False: testutils.skip_message_emit( parent, "MPLS multipush action test. PUSH not supported") return if sup_mpls_act.has_key('sup_set_mpls_label') == False: testutils.skip_message_emit( parent, "MPLS multipush action test. SET_LABEL not supported") return if sup_mpls_act.has_key('sup_set_mpls_tc') == False: testutils.skip_message_emit( parent, "MPLS multipush action test. SET_TC not supported") return if sup_mpls_act.has_key('sup_set_mpls_ttl') == False: testutils.skip_message_emit( parent, "MPLS multipush action test. SET_TTL not supported") return if sup_mpls_act.has_key('sup_dec_mpls_ttl') == False: testutils.skip_message_emit( parent, "MPLS multipush action test. DEC_TTL not supported") return act = action.action_push_mpls() act.ethertype = 0x8847 if test_condition == 0: #act2 = action.action_set_mpls_label() #act2.mpls_label = parent.label + 2 act2 = action.action_set_field() act2.field = match.mpls_label(parent.label + 2) exp_label = parent.label + 2 if parent.num_tags == 0: exp_tc = 0 exp_ttl = parent.ip_ttl else: exp_tc = parent.tc exp_ttl = parent.ttl elif test_condition == 1: #act2 = action.action_set_mpls_tc() #act2.mpls_tc = parent.tc + 2 #exp_tc = act2.mpls_tc act2 = action.action_set_field() act2.field = match.mpls_tc(parent.tc + 2) exp_tc = parent.tc + 2 if parent.num_tags == 0: exp_label = 0 exp_ttl = parent.ip_ttl else: exp_label = parent.label exp_ttl = parent.ttl elif test_condition == 2: act2 = action.action_set_mpls_ttl() act2.mpls_ttl = parent.ttl + 2 exp_ttl = act2.mpls_ttl if parent.num_tags == 0: exp_label = 0 exp_tc = 0 else: exp_label = parent.label exp_tc = parent.tc elif test_condition == 3: act2 = action.action_dec_mpls_ttl() if parent.num_tags == 0: exp_ttl = parent.ip_ttl - 1 exp_label = 0 exp_tc = 0 else: exp_ttl = parent.ttl - 1 exp_label = parent.label exp_tc = parent.tc else: return match_exp = True add_tag_exp = parent.num_tags > 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED action_list = [act, act2] 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, add_tag_exp=add_tag_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_set_ttl_act_tests(parent): """ Test mpls set_ttl 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_set_mpls_ttl') == False: testutils.skip_message_emit( parent, "MPLS set_ttl action test. SET_TTL not supported") return act = action.action_set_mpls_ttl() exp_label = parent.label exp_tc = parent.tc act.mpls_ttl = parent.ttl + 2 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 exp_ttl = parent.ttl else: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED exp_ttl = act.mpls_ttl action_list = [act] testutils.flow_match_test_mpls(parent, pa_port_map, wildcards=0, mpls_label=parent.label, mpls_tc=parent.tc, mpls_ttl=parent.ttl, mpls_label_int=parent.label_int, mpls_tc_int=parent.tc_int, mpls_ttl_int=parent.ttl_int, ip_ttl=parent.ip_ttl, 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_push_set_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 # Match condition on TBL0 (match) label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Match or Unmatch depends on match_exp parameter # Expect different label if (test_condition == 0): exp_label = label + 1 exp_tc = tc exp_ttl = ttl # Expect different TC elif (test_condition == 1): exp_label = label exp_tc = tc + 1 exp_ttl = ttl # Expect different TTL else: # test_condition == 2 exp_label = label exp_tc = tc exp_ttl = ttl + 2 # Create action_list for TBL0 action_list_tbl0 = [] act = action.action_push_mpls() act.ethertype = ETHERTYPE_MPLS action_list_tbl0.append(act) if (match_exp): if (test_condition == 0): act = action.action_set_mpls_label() act.mpls_label = exp_label action_list_tbl0.append(act) elif (test_condition == 1): act = action.action_set_mpls_tc() act.mpls_tc = exp_tc action_list_tbl0.append(act) else: #test_condition == 2 act = action.action_set_mpls_ttl() act.mpls_ttl = exp_ttl action_list_tbl0.append(act) # Match condition on TBL1 label_match_tbl1 = exp_label tc_match_tbl1 = exp_tc dl_type_match_tbl1 = ETHERTYPE_MPLS # Output action for table1 will be set in the framework flow_match_test_mpls_two_tables(parent, pa_port_map, wildcards=wildcards, mpls_label=label, mpls_tc=tc, mpls_ttl=ttl, 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=exp_ttl, add_tag_exp=True, max_test=1)
def mpls_set_two_tables_tests(parent, 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 # Match condition on TBL0 (match) label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Set LABEL TC TTL exp_label = label + 1 exp_tc = tc + 1 exp_ttl = ttl + 2 exp_ip_ttl = ip_ttl # Create action_list for TBL0 act = action.action_set_mpls_label() act.mpls_label = exp_label act2 = action.action_set_mpls_tc() act2.mpls_tc = exp_tc act3 = action.action_set_mpls_ttl() act3.mpls_ttl = exp_ttl action_list_tbl0 = [act, act2, act3] # Expect modified pkt on TBL1 (match) if (match_exp): label_match_tbl1 = exp_label tc_match_tbl1 = exp_tc # Expect the same pkt on TBL1 (Unmatch) 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 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, 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=exp_ttl, exp_ip_ttl=exp_ip_ttl, max_test=1)
def mpls_multipush2_act_tests(parent, test_condition=0): """ Test mpls push and set actions 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_push_mpls') == False: testutils.skip_message_emit(parent, "MPLS multipush action test. PUSH not supported") return if sup_mpls_act.has_key('sup_set_mpls_label') == False: testutils.skip_message_emit(parent, "MPLS multipush action test. SET_LABEL not supported") return if sup_mpls_act.has_key('sup_set_mpls_tc') == False: testutils.skip_message_emit(parent, "MPLS multipush action test. SET_TC not supported") return if sup_mpls_act.has_key('sup_set_mpls_ttl') == False: testutils.skip_message_emit(parent, "MPLS multipush action test. SET_TTL not supported") return if sup_mpls_act.has_key('sup_dec_mpls_ttl') == False: testutils.skip_message_emit(parent, "MPLS multipush action test. DEC_TTL not supported") return act = action.action_push_mpls() act.ethertype = 0x8847 if test_condition == 0: act2 = action.action_set_mpls_label() act2.mpls_label = parent.label + 2 exp_label = act2.mpls_label if parent.num_tags == 0: exp_tc = 0 exp_ttl = parent.ip_ttl else: exp_tc = parent.tc exp_ttl = parent.ttl elif test_condition == 1: act2 = action.action_set_mpls_tc() act2.mpls_tc = parent.tc + 2 exp_tc = act2.mpls_tc if parent.num_tags == 0: exp_label = 0 exp_ttl = parent.ip_ttl else: exp_label = parent.label exp_ttl = parent.ttl elif test_condition == 2: act2 = action.action_set_mpls_ttl() act2.mpls_ttl = parent.ttl + 2 exp_ttl = act2.mpls_ttl if parent.num_tags == 0: exp_label = 0 exp_tc = 0 else: exp_label = parent.label exp_tc = parent.tc elif test_condition == 3: act2 = action.action_dec_mpls_ttl() if parent.num_tags == 0: exp_ttl = parent.ip_ttl - 1 exp_label = 0 exp_tc = 0 else: exp_ttl = parent.ttl - 1 exp_label = parent.label exp_tc = parent.tc else: return match_exp = True add_tag_exp = parent.num_tags > 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED action_list=[act, act2] 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, add_tag_exp=add_tag_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_push_set_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 # Match condition on TBL0 (match) label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Match or Unmatch depends on match_exp parameter # Expect different label if (test_condition == 0): exp_label = label + 1 exp_tc = tc exp_ttl = ttl # Expect different TC elif (test_condition == 1): exp_label = label exp_tc = tc + 1 exp_ttl = ttl # Expect different TTL else: # test_condition == 2 exp_label = label exp_tc = tc exp_ttl = ttl + 2 # Create action_list for TBL0 action_list_tbl0 = [] act = action.action_push_mpls() act.ethertype = ETHERTYPE_MPLS action_list_tbl0.append(act) if (match_exp): if (test_condition == 0): act = action.action_set_mpls_label() act.mpls_label = exp_label action_list_tbl0.append(act) elif (test_condition == 1): act = action.action_set_mpls_tc() act.mpls_tc = exp_tc action_list_tbl0.append(act) else: #test_condition == 2 act = action.action_set_mpls_ttl() act.mpls_ttl = exp_ttl action_list_tbl0.append(act) # Match condition on TBL1 label_match_tbl1 = exp_label tc_match_tbl1 = exp_tc dl_type_match_tbl1 = ETHERTYPE_MPLS # Output action for table1 will be set in the framework flow_match_test_mpls_two_tables(parent, pa_port_map, wildcards=wildcards, mpls_label=label, mpls_tc=tc, mpls_ttl=ttl, 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=exp_ttl, add_tag_exp=True, max_test=1)
def mpls_set_two_tables_tests(parent, 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 # Match condition on TBL0 (match) label_match_tbl0 = label tc_match_tbl0 = tc dl_type_match_tbl0 = ETHERTYPE_MPLS # Set LABEL TC TTL exp_label = label + 1 exp_tc = tc + 1 exp_ttl = ttl + 2 exp_ip_ttl = ip_ttl # Create action_list for TBL0 act = action.action_set_mpls_label() act.mpls_label = exp_label act2 = action.action_set_mpls_tc() act2.mpls_tc = exp_tc act3 = action.action_set_mpls_ttl() act3.mpls_ttl = exp_ttl action_list_tbl0 = [act, act2, act3] # Expect modified pkt on TBL1 (match) if (match_exp) : label_match_tbl1 = exp_label tc_match_tbl1 = exp_tc # Expect the same pkt on TBL1 (Unmatch) 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 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, 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=exp_ttl, exp_ip_ttl=exp_ip_ttl, max_test=1)