Exemple #1
0
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)
Exemple #2
0
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,
    )
Exemple #3
0
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)
Exemple #4
0
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,
    )
Exemple #5
0
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,
    )
Exemple #6
0
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)
Exemple #7
0
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,
    )
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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)