def vlan_set_act_tests(parent, test_condition=0): """ Test vlan set_vid and set_pcp action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 3 """ parent.assertTrue(((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range") (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = \ vlan_action_support_check(parent) new_vid = parent.vid + 2 new_pcp = parent.pcp + 2 if sup_set_vlan_vid == False: testutils.skip_message_emit( parent, "Vlan set action test. SET VLAN VID not supported") return if sup_set_vlan_pcp == False: testutils.skip_message_emit( parent, "Vlan set action test. SET VLAN PCP not supported") return exp_vlan_type = parent.vlan_type if test_condition == 0: act = action.action_set_vlan_vid() act.vlan_vid = new_vid if parent.num_tags == 0: match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_vid = new_vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 1: act = action.action_set_vlan_vid() act.vlan_vid = 4096 #OUT OF RANGE match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT elif test_condition == 2: act = action.action_set_vlan_pcp() act.vlan_pcp = new_pcp if parent.num_tags == 0: match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_vid = parent.vid exp_pcp = new_pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 3: act = action.action_set_vlan_pcp() act.vlan_pcp = 8 #OUT OF RANGE match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return action_list = [act] testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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 vlan_multipush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 3 """ parent.assertTrue( ((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range" ) (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. PUSH not supported") return if sup_pop_vlan == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. POP not supported") return if sup_set_vlan_vid == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. SET VLAN VID not supported") return if sup_set_vlan_pcp == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. SET VLAN PCP not supported") return new_vid = parent.vid + 2 new_pcp = parent.pcp + 2 act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN act3 = None if test_condition == 0: act2 = action.action_set_vlan_vid() act2.vlan_vid = new_vid add_tag_exp = True exp_vid = new_vid exp_vlan_type = act.ethertype if parent.num_tags == 0: exp_pcp = 0 else: exp_pcp = parent.pcp elif test_condition == 1: act2 = action.action_set_vlan_pcp() act2.vlan_pcp = new_pcp add_tag_exp = True exp_pcp = new_pcp exp_vlan_type = act.ethertype if parent.num_tags == 0: exp_vid = 0 else: exp_vid = parent.vid elif test_condition == 2: act2 = action.action_set_vlan_vid() act2.vlan_vid = new_vid act3 = action.action_set_vlan_pcp() act3.vlan_pcp = new_pcp add_tag_exp = True exp_vid = new_vid exp_pcp = new_pcp exp_vlan_type = act.ethertype elif test_condition == 3: act2 = action.action_pop_vlan() add_tag_exp = False exp_vid = parent.vid exp_pcp = parent.pcp exp_vlan_type = parent.vlan_type else: return match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED action_list = [act, act2] if act3 is not None: action_list.append(act3) testutils.flow_match_test_vlan( parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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 vlan_pop_act_tests(parent): """ Test vlan 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_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = \ vlan_action_support_check(parent) if sup_pop_vlan == False: testutils.skip_message_emit(parent, "Vlan pop action test. POP not supported") return act = action.action_pop_vlan() exp_vlan_type = ETHERTYPE_VLAN if parent.num_tags == 0: match_exp = False exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT elif parent.num_tags == 1: match_exp = True exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED else: match_exp = True exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED action_list = [act] testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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 vlan_set_act_tests(parent, test_condition=0): """ Test vlan set_vid and set_pcp action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 3 """ parent.assertTrue( ((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range" ) (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = vlan_action_support_check(parent) new_vid = parent.vid + 2 new_pcp = parent.pcp + 2 if sup_set_vlan_vid == False: testutils.skip_message_emit(parent, "Vlan set action test. SET VLAN VID not supported") return if sup_set_vlan_pcp == False: testutils.skip_message_emit(parent, "Vlan set action test. SET VLAN PCP not supported") return exp_vlan_type = parent.vlan_type if test_condition == 0: act = action.action_set_vlan_vid() act.vlan_vid = new_vid if parent.num_tags == 0: match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_vid = new_vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED elif test_condition == 1: act = action.action_set_vlan_vid() act.vlan_vid = 4096 # OUT OF RANGE match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT elif test_condition == 2: act = action.action_set_vlan_pcp() act.vlan_pcp = new_pcp if parent.num_tags == 0: match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT else: match_exp = True exp_vid = parent.vid exp_pcp = new_pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED elif test_condition == 3: act = action.action_set_vlan_pcp() act.vlan_pcp = 8 # OUT OF RANGE match_exp = False exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return action_list = [act] testutils.flow_match_test_vlan( parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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 vlan_singlepush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 2 """ parent.assertTrue( ((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range" ) (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit(parent, "Vlan single push action test. SET VLAN VID not supported") return if test_condition == 0: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 0 exp_pcp = 0 else: exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED elif test_condition == 1: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN_PBB match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 0 exp_pcp = 0 else: exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED elif test_condition == 2: act = action.action_push_vlan() act.ethertype = 0xAAA # Other than 0x8100 and 0x88a8 match_exp = False add_tag_exp = False exp_vid = 0 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return action_list = [act] testutils.flow_match_test_vlan( parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=act.ethertype, 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 vlan_singlepush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 2 """ parent.assertTrue(((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range") #print("parent vid="+str(parent.vid)) #print("parent pcp="+str(parent.pcp)) (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = (True, True, True, True) # vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit( parent, "Vlan single push action test. SET VLAN VID not supported") return if test_condition == 0: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 else: exp_vid = parent.vid exp_pcp = parent.pcp vlan_vid = match.vlan_vid(parent.vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = parent.vid exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 1: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN_PBB match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 else: exp_vid = parent.vid exp_pcp = parent.pcp vlan_vid = match.vlan_vid(parent.vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = parent.vid # parent.vid_2nd = parent.vid # parent.pcp_2nd = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 2: act = action.action_push_vlan() act.ethertype = 0xaaa #Other than 0x8100 and 0x88a8 match_exp = False add_tag_exp = False exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return #NOTE need to set a VLAN vid value, as vid=0 is stripped by the system action_list = [act, act2] wildcards = 0 if parent.num_tags == 0: wildcards |= 1 << ofp.OFPXMT_OFB_VLAN_VID wildcards |= 1 << ofp.OFPXMT_OFB_VLAN_PCP testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=wildcards, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=act.ethertype, 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 vlan_pop_act_tests(parent): """ Test vlan 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_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = vlan_action_support_check(parent) if sup_pop_vlan == False: testutils.skip_message_emit(parent, "Vlan pop action test. POP not supported") return act = action.action_pop_vlan() exp_vlan_type = ETHERTYPE_VLAN if parent.num_tags == 0: match_exp = False exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_MATCH_INCONSISTENT elif parent.num_tags == 1: match_exp = True exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED else: match_exp = True exp_vid = -1 exp_pcp = 0 exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 # NOT_EXPECTED exp_msg_code = 0 # NOT_EXPECTED action_list = [act] testutils.flow_match_test_vlan( parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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 vlan_any_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with OFPVID_ANY @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 1 """ wildcards = 0 if vlan_id_mask == True: wildcards = ofp.OFPFW_DL_VLAN if vlan_pcp_mask == True: wildcards = wildcards + ofp.OFPFW_DL_VLAN_PCP pcp = random.randint(0, 7) vid_match = ofp.OFPVID_ANY exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED if test_condition == 0: vid = -1 pcp_match = 7 - pcp # unmatching value if (vlan_id_mask == True) and (vlan_pcp_mask == True): match_exp = True else: match_exp = False elif test_condition == 1: vid = random.randint(0, 4095) pcp_match = pcp match_exp = True match_exp = True else: return if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT_EXPECTED exp_pcp = 0 #NOT_EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=-1, dl_vlan_pcp_int=0, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_specific_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with specific matching value @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 5 """ wildcards = 0 if vlan_id_mask == True: wildcards = ofp.OFPFW_DL_VLAN if vlan_pcp_mask == True: wildcards = wildcards + ofp.OFPFW_DL_VLAN_PCP vid_match = random.randint(0, 4094) pcp_match = random.randint(0, 6) exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED vid_int = -1 pcp_int = 0 if test_condition == 0: vid = -1 pcp = 0 if (vlan_id_mask == True) and (vlan_pcp_mask == True): match_exp = True else: match_exp = False elif test_condition == 1: vid = vid_match pcp = pcp_match match_exp = True elif test_condition == 2: vid = vid_match pcp = pcp_match + 1 if vlan_pcp_mask == True: match_exp = True else: match_exp = False elif test_condition == 3: vid = vid_match + 1 pcp = pcp_match if vlan_id_mask == True: match_exp = True else: match_exp = False elif test_condition == 4: vid = vid_match pcp = pcp_match vid_int = vid_match + 1 pcp_int = pcp_match + 1 match_exp = True elif test_condition == 5: vid = vid_match + 1 pcp = pcp_match + 1 vid_int = vid_match pcp_int = pcp_match if (vlan_id_mask == True) and (vlan_pcp_mask == True): match_exp = True else: match_exp = False else: return if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT_EXPECTED exp_pcp = 0 #NOT_EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_singlepush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 2 """ parent.assertTrue(((parent.num_tags>=0) and (parent.num_tags<=2)), "Parameter num_tags not within an acceptable range") #print("parent vid="+str(parent.vid)) #print("parent pcp="+str(parent.pcp)) (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = (True, True, True, True) # vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit(parent, "Vlan single push action test. SET VLAN VID not supported") return if test_condition == 0: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 else: exp_vid = parent.vid exp_pcp = parent.pcp vlan_vid = match.vlan_vid(parent.vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = parent.vid exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 1: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN_PBB match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 else: exp_vid = parent.vid exp_pcp = parent.pcp vlan_vid = match.vlan_vid(parent.vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = parent.vid # parent.vid_2nd = parent.vid # parent.pcp_2nd = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 2: act = action.action_push_vlan() act.ethertype = 0xaaa #Other than 0x8100 and 0x88a8 match_exp = False add_tag_exp = False exp_vid = 1 exp_pcp = 0 vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = 1 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return #NOTE need to set a VLAN vid value, as vid=0 is stripped by the system action_list=[act, act2] wildcards = 0 if parent.num_tags == 0: wildcards |= 1<<ofp.OFPXMT_OFB_VLAN_VID wildcards |= 1<<ofp.OFPXMT_OFB_VLAN_PCP testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=wildcards, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=act.ethertype, 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 vlan_multipush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 3 """ parent.assertTrue(((parent.num_tags>=0) and (parent.num_tags<=2)), "Parameter num_tags not within an acceptable range") (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = (True, True, True, True) # vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. PUSH not supported") return if sup_pop_vlan == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. POP not supported") return if sup_set_vlan_vid == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. SET VLAN VID not supported") return if sup_set_vlan_pcp == False: testutils.skip_message_emit(parent, "Vlan multiple push action test. SET VLAN PCP not supported") return inst_app_flag = testutils.WRITE_ACTIONS_INSTRUCTION new_vid = parent.vid + 2; new_pcp = parent.pcp + 2; act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN act3 = None if test_condition == 0: vlan_vid = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = new_vid add_tag_exp = True exp_vid = new_vid exp_vlan_type = act.ethertype if parent.num_tags == 0: exp_pcp = 0 else: exp_pcp = parent.pcp elif test_condition == 1: #act2 = action.action_set_vlan_pcp() #act2.vlan_pcp = new_pcp vlan_pcp = match.vlan_pcp(new_pcp) act2 = action.action_set_field() act2.field = vlan_pcp add_tag_exp = True exp_pcp = new_pcp exp_vlan_type = act.ethertype #exp_vid = 0 if parent.num_tags == 0: exp_vid = 0 else: exp_vid = parent.vid elif test_condition == 2: vlan_vid = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) act2 = action.action_set_field() act2.field = vlan_vid #act2 = action.action_set_vlan_vid() #act2.vlan_vid = new_vid #act3 = action.action_set_vlan_pcp() #act3.vlan_pcp = new_pcp vlan_pcp = match.vlan_pcp(new_pcp) act3 = action.action_set_field() act3.field = vlan_pcp add_tag_exp = True exp_vid = new_vid exp_pcp = new_pcp exp_vlan_type = act.ethertype elif test_condition == 3: act2 = action.action_pop_vlan() add_tag_exp = False exp_vid = parent.vid exp_pcp = parent.pcp exp_vlan_type = parent.vlan_type inst_app_flag = testutils.APPLY_ACTIONS_INSTRUCTION elif test_condition == 4: vlan_vid = match.vlan_vid(1 + ofp.OFPVID_PRESENT) act3 = action.action_set_field() act3.field = vlan_vid #act2 = action.action_set_vlan_pcp() #act2.vlan_pcp = new_pcp vlan_pcp = match.vlan_pcp(new_pcp) act2 = action.action_set_field() act2.field = vlan_pcp add_tag_exp = True exp_pcp = new_pcp exp_vlan_type = act.ethertype #exp_vid = 0 if parent.num_tags == 0: exp_vid = 1 else: exp_vid = parent.vid else: return match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED action_list=[act, act2] if act3 is not None: action_list.append(act3) wildcards = 0 if parent.num_tags == 0: wildcards |= 1<<ofp.OFPXMT_OFB_VLAN_VID wildcards |= 1<<ofp.OFPXMT_OFB_VLAN_PCP testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=wildcards, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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, inst_app_flag=inst_app_flag, max_test=1)
def vlan_outrange_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with out-of-range matching value, expecting an error @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 4 """ wildcards = 0 if vlan_id_mask == True: wildcards = 1 << ofp.OFPXMT_OFB_VLAN_VID if vlan_pcp_mask == True: wildcards = wildcards + (1 << ofp.OFPXMT_OFB_VLAN_PCP) vid = random.randint(1, 4095) pcp = random.randint(0, 7) exp_vid = vid exp_pcp = vid if test_condition == 0: vid_match = ofp.OFPVID_NONE pcp_match = pcp + 8 #out of range if vlan_pcp_mask == True: if vlan_id_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_PREREQ elif test_condition == 1: vid_match = ofp.OFPVID_PRESENT pcp_match = pcp + 8 #out of range if vlan_pcp_mask == True: if vlan_id_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 2: vid_match = vid pcp_match = pcp + 8 #out of range if vlan_id_mask == True: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_WILDCARDS else: if vlan_pcp_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 3: vid_match = vid + 4096 #out of range pcp_match = pcp if vlan_id_mask == True: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_WILDCARDS else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 4: vid_match = vid + 4096 #out of range pcp_match = pcp + 8 #out of range if vlan_id_mask == True: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_WILDCARDS else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE else: return if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT EXPECTED exp_pcp = 0 #NOT EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=-1, dl_vlan_pcp_int=0, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_specific_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with specific matching value @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 5 """ wildcards = 0 if vlan_id_mask == True: wildcards = 1 << ofp.OFPXMT_OFB_VLAN_VID if vlan_pcp_mask == True: wildcards = wildcards + (1 << ofp.OFPXMT_OFB_VLAN_PCP) vid_match = random.randint(1, 4094) pcp_match = random.randint(0, 6) exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED vid_int = -1 pcp_int = 0 if test_condition == 0: vid = -1 pcp = 0 #if (vlan_id_mask == True) and (vlan_pcp_mask == True): # match_exp = True #else: # match_exp = False match_exp = False elif test_condition == 1: vid = vid_match pcp = pcp_match match_exp = True elif test_condition == 2: vid = vid_match pcp = pcp_match + 1 if vlan_pcp_mask == True: match_exp = True else: match_exp = False elif test_condition == 3: vid = vid_match + 1 pcp = pcp_match if vlan_id_mask == True: match_exp = True else: match_exp = False elif test_condition == 4: vid = vid_match pcp = pcp_match vid_int = vid_match + 1 pcp_int = pcp_match + 1 match_exp = True elif test_condition == 5: vid = vid_match + 1 pcp = pcp_match + 1 vid_int = vid_match pcp_int = pcp_match if (vlan_id_mask == True) and (vlan_pcp_mask == True): match_exp = True else: match_exp = False else: return if vlan_id_mask == True: vid_match = ofp.OFPVID_PRESENT if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT_EXPECTED exp_pcp = 0 #NOT_EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_none_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with OFPVID_NONE @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 2 """ wildcards = 0 if vlan_id_mask == True: wildcards = 1 << ofp.OFPXMT_OFB_VLAN_VID if vlan_pcp_mask == True: wildcards = wildcards + (1 << ofp.OFPXMT_OFB_VLAN_PCP) vid_match = ofp.OFPVID_NONE pcp = random.randint(0, 7) exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED if test_condition == 0: vid = -1 pcp_match = pcp if vlan_pcp_mask == True: match_exp = True else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_PREREQ elif test_condition == 1: vid = random.randint(1, 4095) pcp_match = 7 - pcp # unmatching value if vlan_id_mask == False: match_exp = False elif vlan_pcp_mask == False: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_PREREQ else: match_exp = True elif test_condition == 2: vid = random.randint(1, 4095) pcp_match = pcp if vlan_pcp_mask == False: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_PREREQ else: if vlan_id_mask == True: match_exp = True else: match_exp = False else: return if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT_EXPECTED exp_pcp = 0 #NOT_EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=-1, dl_vlan_pcp_int=0, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_singlepush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 2 """ parent.assertTrue(((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range") (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = \ vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit( parent, "Vlan single push action test. SET VLAN VID not supported") return if test_condition == 0: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 0 exp_pcp = 0 else: exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 1: act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN_PBB match_exp = True add_tag_exp = True if parent.num_tags == 0: exp_vid = 0 exp_pcp = 0 else: exp_vid = parent.vid exp_pcp = parent.pcp exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED elif test_condition == 2: act = action.action_push_vlan() act.ethertype = 0xaaa #Other than 0x8100 and 0x88a8 match_exp = False add_tag_exp = False exp_vid = 0 exp_pcp = 0 exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_ACTION exp_msg_code = ofp.OFPBAC_BAD_ARGUMENT else: return action_list = [act] testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=act.ethertype, 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 vlan_outrange_tests(parent, vlan_id_mask=False, vlan_pcp_mask=False, test_condition=0): """ Vlan match test with out-of-range matching value, expecting an error @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param vlan_id_mask If True, VLAN ID is wildcarded @param vlan_pcp_mask If True, VLAN PCP is wildcarded @param test_condition The value between 0 and 4 """ wildcards = 0 if vlan_id_mask == True: wildcards = ofp.OFPFW_DL_VLAN if vlan_pcp_mask == True: wildcards = wildcards + ofp.OFPFW_DL_VLAN_PCP vid = random.randint(0, 4095) pcp = random.randint(0, 7) exp_vid = vid exp_pcp = vid if test_condition == 0: vid_match = ofp.OFPVID_NONE pcp_match = pcp + 8 #out of range if vlan_id_mask == True: if vlan_pcp_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE else: match_exp = False exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED elif test_condition == 1: vid_match = ofp.OFPVID_ANY pcp_match = pcp + 8 #out of range if vlan_pcp_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 2: vid_match = vid + 4096 #out of range pcp_match = pcp if vlan_id_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 3: vid_match = vid pcp_match = pcp + 8 #out of range if vlan_pcp_mask == True: match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE elif test_condition == 4: vid_match = vid + 4096 #out of range pcp_match = pcp + 8 #out of range if (vlan_id_mask == True) and (vlan_pcp_mask == True): match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT EXPECTED exp_msg_code = 0 #NOT EXPECTED else: match_exp = False exp_msg = ofp.OFPT_ERROR exp_msg_type = ofp.OFPET_BAD_MATCH exp_msg_code = ofp.OFPBMC_BAD_VALUE else: return if match_exp == True: exp_vid = vid exp_pcp = pcp else: exp_vid = 0 #NOT EXPECTED exp_pcp = 0 #NOT EXPECTED testutils.flow_match_test_vlan(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=-1, dl_vlan_pcp_int=0, vid_match=vid_match, pcp_match=pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, wildcards=wildcards, match_exp=match_exp, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, max_test=1)
def vlan_multipush_act_tests(parent, test_condition=0): """ Test vlan push action for the packets with/without tags @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger @param test_condition Value between 0 and 3 """ parent.assertTrue(((parent.num_tags >= 0) and (parent.num_tags <= 2)), "Parameter num_tags not within an acceptable range") (sup_pop_vlan, sup_push_vlan, sup_set_vlan_vid, sup_set_vlan_pcp) = \ vlan_action_support_check(parent) if sup_push_vlan == False: testutils.skip_message_emit( parent, "Vlan multiple push action test. PUSH not supported") return if sup_pop_vlan == False: testutils.skip_message_emit( parent, "Vlan multiple push action test. POP not supported") return if sup_set_vlan_vid == False: testutils.skip_message_emit( parent, "Vlan multiple push action test. SET VLAN VID not supported") return if sup_set_vlan_pcp == False: testutils.skip_message_emit( parent, "Vlan multiple push action test. SET VLAN PCP not supported") return new_vid = parent.vid + 2 new_pcp = parent.pcp + 2 act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN act3 = None if test_condition == 0: act2 = action.action_set_vlan_vid() act2.vlan_vid = new_vid add_tag_exp = True exp_vid = new_vid exp_vlan_type = act.ethertype if parent.num_tags == 0: exp_pcp = 0 else: exp_pcp = parent.pcp elif test_condition == 1: act2 = action.action_set_vlan_pcp() act2.vlan_pcp = new_pcp add_tag_exp = True exp_pcp = new_pcp exp_vlan_type = act.ethertype if parent.num_tags == 0: exp_vid = 0 else: exp_vid = parent.vid elif test_condition == 2: act2 = action.action_set_vlan_vid() act2.vlan_vid = new_vid act3 = action.action_set_vlan_pcp() act3.vlan_pcp = new_pcp add_tag_exp = True exp_vid = new_vid exp_pcp = new_pcp exp_vlan_type = act.ethertype elif test_condition == 3: act2 = action.action_pop_vlan() add_tag_exp = False exp_vid = parent.vid exp_pcp = parent.pcp exp_vlan_type = parent.vlan_type else: return match_exp = True exp_msg = ofp.OFPT_FLOW_REMOVED exp_msg_type = 0 #NOT_EXPECTED exp_msg_code = 0 #NOT_EXPECTED action_list = [act, act2] if act3 is not None: action_list.append(act3) testutils.flow_match_test_vlan(parent, pa_port_map, wildcards=0, dl_vlan=parent.vid, dl_vlan_pcp=parent.pcp, dl_vlan_type=parent.vlan_type, dl_vlan_int=parent.vid_2nd, dl_vlan_pcp_int=parent.pcp_2nd, vid_match=parent.vid_match, pcp_match=parent.pcp_match, exp_vid=exp_vid, exp_pcp=exp_pcp, exp_vlan_type=exp_vlan_type, 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)