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] dl_vlan = random.randint(1,0x7ff) dl_vlan_pcp = random.randint(0,7) pkt = testutils.simple_tcp_packet(vlan_tags=[{'vid': dl_vlan, 'pcp': dl_vlan_pcp}]) match_ls = parse.packet_to_flow_match(pkt) wildcards = 0 new_dl_vlan = random.randint(0x800,0xfff) exp_pkt = testutils.simple_tcp_packet(vlan_tags=[{'type': ETHERTYPE_VLAN, 'vid': new_dl_vlan, 'pcp': dl_vlan_pcp}, {'vid': dl_vlan, 'pcp': dl_vlan_pcp}]) # 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_vlan_vid() #act.vlan_vid = new_dl_vlan act = action.action_set_field() act.field = match.vlan_vid(new_dl_vlan + ofp.OFPVID_PRESENT) act_list.append([act]) next_avail.append(True) chk_expire.append(False) #Table 2 act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN act_list.append([act]) next_avail.append(False) chk_expire.append(False) write_action_test_multi_tables(self, ing_port, egr_port, match_fields = match_ls, wildcards = wildcards, act_list = act_list, next_avail = next_avail, chk_expire = chk_expire, pkt = pkt, exp_pkt = exp_pkt)
def runTest(self): old_vid = 2 new_vid = 3 # sup_acts = supported_actions_get(self) # if not (sup_acts & 1 << ofp.OFPXMT_OFB_VLAN_VID): # testutils.skip_message_emit(self, "Modify VLAN tag test") # return pkt = testutils.simple_tcp_packet(vlan_tags=[{'vid': old_vid}]) exp_pkt = testutils.simple_tcp_packet(vlan_tags=[{'vid': new_vid}]) vid_act = action.action_set_field() vid_act.field = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) testutils.flow_match_test(self, pa_port_map, pkt=pkt, exp_pkt=exp_pkt, apply_action_list=[vid_act])
def runTest(self): new_vid = 4002 # sup_acts = supported_actions_get(self) # if not(sup_acts & 1<<ofp.OFPXMT_OFB_VLAN_VID): # testutils.skip_message_emit(self, "Add VLAN tag test") # return pkt = testutils.simple_tcp_packet() exp_pkt = testutils.simple_tcp_packet( vlan_tags=[{'vid': new_vid}]) push_act = action.action_push_vlan() push_act.ethertype = 0x8100 vid_act = action.action_set_field() vid_act.field=match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) #vid_act = action.action_set_vlan_vid() #vid_act.vlan_vid = new_vid testutils.flow_match_test(self, pa_port_map, pkt=pkt, exp_pkt=exp_pkt, apply_action_list=[push_act, vid_act])
def runTest(self): new_vid = 4002 # sup_acts = supported_actions_get(self) # if not(sup_acts & 1<<ofp.OFPXMT_OFB_VLAN_VID): # testutils.skip_message_emit(self, "Add VLAN tag test") # return pkt = testutils.simple_tcp_packet() exp_pkt = testutils.simple_tcp_packet(vlan_tags=[{'vid': new_vid}]) push_act = action.action_push_vlan() push_act.ethertype = 0x8100 vid_act = action.action_set_field() vid_act.field = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) #vid_act = action.action_set_vlan_vid() #vid_act.vlan_vid = new_vid testutils.flow_match_test(self, pa_port_map, pkt=pkt, exp_pkt=exp_pkt, apply_action_list=[push_act, vid_act])
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_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_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) = (True, True, True, True) # vlan_action_support_check(parent) new_vid = parent.vid + 2; new_pcp = parent.pcp + 2; #print(str(new_vid)) #print(str(new_pcp)) 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: vlan_vid = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #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: vlan_vid = match.vlan_vid(4096 + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #act = action.action_set_vlan_vid() #act.vlan_vid = 4096 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_SET_ARGUMENT elif test_condition == 2: #act = action.action_set_vlan_pcp() #act.vlan_pcp = new_pcp vlan_pcp = match.vlan_pcp(new_pcp) act = action.action_set_field() act.field = vlan_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 vlan_pcp = match.vlan_pcp(8) #OUT OF RANGE act = action.action_set_field() act.field = vlan_pcp 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_SET_ARGUMENT else: return action_list=[act] 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, 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_set_two_tables_tests(parent, test_condition=0): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 vid = random.randint(1, 4094) pcp = random.randint(0, 6) vid_int = -1 pcp_int = 0 exp_vid = vid + 1 exp_pcp = pcp + 1 # Match condition on TBL0 (match) vid_match_tbl0 = vid pcp_match_tbl0 = pcp # Expect modified pkt on TBL1 (match) if (test_condition == 0): vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp match_exp_tbl1 = True # Expect the same pkt on TBL1 (Unmatch) else: #test_condition == 1 vid_match_tbl1 = vid pcp_match_tbl1 = pcp match_exp_tbl1 = False # Create action_list for TBL0 #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #act2 = action.action_set_vlan_pcp() #act2.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act2 = action.action_set_field() act2.field = vlan_pcp action_list_tbl0 = [act, act2] # Output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, wildcards=wildcards, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0 = action_list_tbl0, match_exp_tbl0=True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1 = action_list_tbl1, match_exp_tbl1=match_exp_tbl1, exp_vid=exp_vid, exp_pcp=exp_pcp, max_test=1)
def vlan_push_two_tables_tests(parent, test_condition=0, match_exp=True): """ @param parent must implement controller, dataplane, asserttrue, assertequal and logger """ wildcards = 0 vid = random.randint(1, 4094) pcp = random.randint(0, 6) vid_int = -1 pcp_int = 0 if (test_condition == 0): exp_vid = vid exp_pcp = pcp elif (test_condition == 1): exp_vid = vid + 1 exp_pcp = pcp elif (test_condition == 2): exp_vid = vid exp_pcp = pcp + 1 elif (test_condition == 3): exp_vid = vid + 1 exp_pcp = pcp + 1 else: return # match condition on tbl0 (match) vid_match_tbl0 = vid pcp_match_tbl0 = pcp # create action_list for tbl0 action_list_tbl0 = [] act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN action_list_tbl0.append(act) if (match_exp): # push-only for test0 if (test_condition == 1): #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) elif (test_condition == 2): #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) elif (test_condition == 3): #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) else: if (test_condition == 0): #act = action.action_set_vlan_vid() #act.vlan_vid = vid + 1 vlan_vid = match.vlan_vid(vid + 1 + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) # Create action_list for TBL1 vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp # Output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0=action_list_tbl0, match_exp_tbl0=True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1=action_list_tbl1, match_exp_tbl1=match_exp, exp_vid=exp_vid, exp_pcp=exp_pcp, add_tag_exp=True, wildcards=wildcards, max_test=1)
def novlan_push_two_tables_tests(parent): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 vid = -1 pcp = 0 vid_int = -1 pcp_int = 0 exp_vid = random.randint(1, 4094) exp_pcp = random.randint(0, 6) # Match condition on TBL0 (match) vid_match_tbl0 = ofp.OFPVID_NONE pcp_match_tbl0 = 0 # Create action_list for TBL0 action_list_tbl0 = [] act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN action_list_tbl0.append(act) #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) # create action_list for tbl1 vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp # output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0=action_list_tbl0, match_exp_tbl0=True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1=action_list_tbl1, match_exp_tbl1=True, exp_vid=exp_vid, exp_pcp=exp_pcp, add_tag_exp=True, wildcards=wildcards, max_test=1)
def vlan_set_two_tables_tests(parent, test_condition=0): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 vid = random.randint(1, 4094) pcp = random.randint(0, 6) vid_int = -1 pcp_int = 0 exp_vid = vid + 1 exp_pcp = pcp + 1 # Match condition on TBL0 (match) vid_match_tbl0 = vid pcp_match_tbl0 = pcp # Expect modified pkt on TBL1 (match) if (test_condition == 0): vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp match_exp_tbl1 = True # Expect the same pkt on TBL1 (Unmatch) else: #test_condition == 1 vid_match_tbl1 = vid pcp_match_tbl1 = pcp match_exp_tbl1 = False # Create action_list for TBL0 #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #act2 = action.action_set_vlan_pcp() #act2.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act2 = action.action_set_field() act2.field = vlan_pcp action_list_tbl0 = [act, act2] # Output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, wildcards=wildcards, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0=action_list_tbl0, match_exp_tbl0=True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1=action_list_tbl1, match_exp_tbl1=match_exp_tbl1, exp_vid=exp_vid, exp_pcp=exp_pcp, 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 packet_to_flow_match(packet): """ Create a flow match that matches packet with the given wildcards @param packet The packet to use as a flow template @param pkt_format Currently only L2 is supported. Will indicate the overall packet type for parsing @return An ofp_match object if successful. None if format is not recognized. The wildcards of the match will be cleared for the values extracted from the packet. @todo check min length of packet @todo Check if packet is other than L2 format @todo implement other fields covered by OpenFlow 1.2 """ match_ls = match_list() if Ether in packet: ether = packet[Ether] eth_type = match.eth_type(ether.type) eth_dst = match.eth_dst(parse_mac(ether.dst)) eth_src = match.eth_src(parse_mac(ether.src)) match_ls.add(eth_type) match_ls.add(eth_dst) match_ls.add(eth_src) else: return match_ls if Dot1Q in packet: #TODO: nicer way to get last vlan tag? vlan = packet[Dot1Q:0] vlan_vid = match.vlan_vid(vlan.vlan) vlan_pcp = match.vlan_pcp(vlan.prio) match_ls.add(vlan_vid) match_ls.add(vlan_pcp) vlan_pl = vlan.payload while vlan_pl is not None and vlan_pl.name == Dot1Q.name: vlan = vlan_pl vlan_pl = vlan.payload #We need to overwrite the already # inserted eth_type eth_index = match.tlvs.index() eth_type = match.eth_type(vlan.type) match_ls.tlvs.insert(vlan.type,eth_index) #TODO ARP if MPLS in packet: mpls = packet[MPLS:0] mpls_label = match.mpls_label(mpls.label) mpls_tc = match.mpls_tc(mpls.cos) match_ls.add(mpls_label) match_ls.add(mpls_tc) return match_ls if IP in packet: ip = packet[IP] ipv4_src = match.ipv4_src(parse_ip(ip.src)) ipv4_dst = match.ipv4_dst(parse_ip(ip.dst)) ip_dscp = match.ip_dscp(ip.tos >> 2) ip_ecn = match.ip_ecn(ip.tos & 0x03) match_ls.add(ipv4_src) match_ls.add(ipv4_dst) match_ls.add(ip_dscp) match_ls.add(ip_ecn) else: return match_ls if TCP in packet: tcp = packet[TCP] ip_proto = match.ip_proto(6) tcp_src = match.tcp_src(tcp.sport) tcp_dst = match.tcp_dst(tcp.dport) match_ls.add(ip_proto) match_ls.add(tcp_src) match_ls.add(tcp_dst) return match_ls if UDP in packet: udp = packet[UDP] ip_proto = match.ip_proto(17) udp_src = match.tcp_src(udp.sport) udp_dst = match.tcp_dst(udp.dport) match_ls.add(ip_proto) match_ls.add(udp_src) match_ls.add(udp_dst) returnmatch_ls if ICMP in packet: icmp = packet[ICMP] ip_proto = match.ip_proto(1) icmp_type = match.icmp_type(icmp.type) icmp_code = match.icmp_code(icmp.code) match_ls.add(icmp_type) match_ls.add(icmp_code) return match_ls return match_ls
def packet_to_flow_match(packet): """ Create a flow match that matches packet with the given wildcards @param packet The packet to use as a flow template @param pkt_format Currently only L2 is supported. Will indicate the overall packet type for parsing @return An ofp_match object if successful. None if format is not recognized. The wildcards of the match will be cleared for the values extracted from the packet. @todo check min length of packet @todo Check if packet is other than L2 format @todo implement other fields covered by OpenFlow 1.2 """ match_ls = match_list() if Ether in packet: ether = packet[Ether] eth_type = match.eth_type(ether.type) eth_dst = match.eth_dst(parse_mac(ether.dst)) eth_src = match.eth_src(parse_mac(ether.src)) match_ls.add(eth_type) match_ls.add(eth_dst) match_ls.add(eth_src) else: return match_ls if Dot1Q in packet: #TODO: nicer way to get last vlan tag? vlan = packet[Dot1Q:0] vlan_vid = match.vlan_vid(vlan.vlan) vlan_pcp = match.vlan_pcp(vlan.prio) match_ls.add(vlan_vid) match_ls.add(vlan_pcp) vlan_pl = vlan.payload while vlan_pl is not None and vlan_pl.name == Dot1Q.name: vlan = vlan_pl vlan_pl = vlan.payload #We need to overwrite the already # inserted eth_type eth_index = match.tlvs.index() eth_type = match.eth_type(vlan.type) match_ls.tlvs.insert(vlan.type, eth_index) #TODO ARP if MPLS in packet: mpls = packet[MPLS:0] mpls_label = match.mpls_label(mpls.label) mpls_tc = match.mpls_tc(mpls.cos) match_ls.add(mpls_label) match_ls.add(mpls_tc) return match_ls if IP in packet: ip = packet[IP] ipv4_src = match.ipv4_src(parse_ip(ip.src)) ipv4_dst = match.ipv4_dst(parse_ip(ip.dst)) ip_dscp = match.ip_dscp(ip.tos >> 2) ip_ecn = match.ip_ecn(ip.tos & 0x03) match_ls.add(ipv4_src) match_ls.add(ipv4_dst) match_ls.add(ip_dscp) match_ls.add(ip_ecn) else: return match_ls if TCP in packet: tcp = packet[TCP] ip_proto = match.ip_proto(6) tcp_src = match.tcp_src(tcp.sport) tcp_dst = match.tcp_dst(tcp.dport) match_ls.add(ip_proto) match_ls.add(tcp_src) match_ls.add(tcp_dst) return match_ls if UDP in packet: udp = packet[UDP] ip_proto = match.ip_proto(17) udp_src = match.tcp_src(udp.sport) udp_dst = match.tcp_dst(udp.dport) match_ls.add(ip_proto) match_ls.add(udp_src) match_ls.add(udp_dst) returnmatch_ls if ICMP in packet: icmp = packet[ICMP] ip_proto = match.ip_proto(1) icmp_type = match.icmp_type(icmp.type) icmp_code = match.icmp_code(icmp.code) match_ls.add(icmp_type) match_ls.add(icmp_code) return match_ls return match_ls
def novlan_push_two_tables_tests(parent): """ @param parent Must implement controller, dataplane, assertTrue, assertEqual and logger """ wildcards = 0 vid = -1 pcp = 0 vid_int = -1 pcp_int = 0 exp_vid = random.randint(1, 4094) exp_pcp = random.randint(0, 6) # Match condition on TBL0 (match) vid_match_tbl0 = ofp.OFPVID_NONE pcp_match_tbl0 = 0 # Create action_list for TBL0 action_list_tbl0 = [] act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN action_list_tbl0.append(act) #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) # create action_list for tbl1 vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp # output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0 = action_list_tbl0, match_exp_tbl0 = True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1 = action_list_tbl1, match_exp_tbl1 = True, exp_vid=exp_vid, exp_pcp=exp_pcp, add_tag_exp=True, wildcards=wildcards, max_test=1)
def vlan_push_two_tables_tests(parent, test_condition=0, match_exp = True): """ @param parent must implement controller, dataplane, asserttrue, assertequal and logger """ wildcards = 0 vid = random.randint(1, 4094) pcp = random.randint(0, 6) vid_int = -1 pcp_int = 0 if (test_condition == 0): exp_vid = vid exp_pcp = pcp elif (test_condition == 1): exp_vid = vid + 1 exp_pcp = pcp elif (test_condition == 2): exp_vid = vid exp_pcp = pcp + 1 elif (test_condition == 3): exp_vid = vid + 1 exp_pcp = pcp + 1 else: return # match condition on tbl0 (match) vid_match_tbl0 = vid pcp_match_tbl0 = pcp # create action_list for tbl0 action_list_tbl0 = [] act = action.action_push_vlan() act.ethertype = ETHERTYPE_VLAN action_list_tbl0.append(act) if (match_exp): # push-only for test0 if (test_condition == 1): #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) elif (test_condition == 2): #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) elif (test_condition == 3): #act = action.action_set_vlan_vid() #act.vlan_vid = exp_vid vlan_vid = match.vlan_vid(exp_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) #act = action.action_set_vlan_pcp() #act.vlan_pcp = exp_pcp vlan_pcp = match.vlan_pcp(exp_pcp) act = action.action_set_field() act.field = vlan_pcp action_list_tbl0.append(act) else: if (test_condition == 0): #act = action.action_set_vlan_vid() #act.vlan_vid = vid + 1 vlan_vid = match.vlan_vid(vid + 1 + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid action_list_tbl0.append(act) # Create action_list for TBL1 vid_match_tbl1 = exp_vid pcp_match_tbl1 = exp_pcp # Output action for table1 will be set in the framework action_list_tbl1 = None flow_match_test_vlan_two_tables(parent, pa_port_map, dl_vlan=vid, dl_vlan_pcp=pcp, dl_vlan_int=vid_int, dl_vlan_pcp_int=pcp_int, vid_match_tbl0=vid_match_tbl0, pcp_match_tbl0=pcp_match_tbl0, action_list_tbl0 = action_list_tbl0, match_exp_tbl0 = True, vid_match_tbl1=vid_match_tbl1, pcp_match_tbl1=pcp_match_tbl1, action_list_tbl1 = action_list_tbl1, match_exp_tbl1 = match_exp, exp_vid=exp_vid, exp_pcp=exp_pcp, add_tag_exp=True, wildcards=wildcards, 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) = (True, True, True, True) # vlan_action_support_check(parent) new_vid = parent.vid + 2 new_pcp = parent.pcp + 2 #print(str(new_vid)) #print(str(new_pcp)) 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: vlan_vid = match.vlan_vid(new_vid + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #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: vlan_vid = match.vlan_vid(4096 + ofp.OFPVID_PRESENT) act = action.action_set_field() act.field = vlan_vid #act = action.action_set_vlan_vid() #act.vlan_vid = 4096 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_SET_ARGUMENT elif test_condition == 2: #act = action.action_set_vlan_pcp() #act.vlan_pcp = new_pcp vlan_pcp = match.vlan_pcp(new_pcp) act = action.action_set_field() act.field = vlan_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 vlan_pcp = match.vlan_pcp(8) #OUT OF RANGE act = action.action_set_field() act.field = vlan_pcp 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_SET_ARGUMENT else: return action_list = [act] 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, exp_msg=exp_msg, exp_msg_type=exp_msg_type, exp_msg_code=exp_msg_code, action_list=action_list, max_test=1)