예제 #1
0
def action_generate(parent, field_to_mod, mod_field_vals):
    """
    Create an action to modify the field indicated in field_to_mod

    @param parent Must implement, assertTrue
    @param field_to_mod The field to modify as a string name
    @param mod_field_vals Hash of values to use for modified values
    """

    act = None

    if field_to_mod in ['pktlen']:
        return None

    if field_to_mod == 'dl_dst':
        act = action.action_set_dl_dst()
        act.dl_addr = parse.parse_mac(mod_field_vals['dl_dst'])
    elif field_to_mod == 'dl_src':
        act = action.action_set_dl_src()
        act.dl_addr = parse.parse_mac(mod_field_vals['dl_src'])
    elif field_to_mod == 'dl_vlan_enable':
        if not mod_field_vals['dl_vlan_enable']: # Strip VLAN tag
            act = action.action_strip_vlan()
        # Add VLAN tag is handled by dl_vlan field
        # Will return None in this case
    elif field_to_mod == 'dl_vlan':
        act = action.action_set_vlan_vid()
        act.vlan_vid = mod_field_vals['dl_vlan']
    elif field_to_mod == 'dl_vlan_pcp':
        act = action.action_set_vlan_pcp()
        act.vlan_pcp = mod_field_vals['dl_vlan_pcp']
    elif field_to_mod == 'ip_src':
        act = action.action_set_nw_src()
        act.nw_addr = parse.parse_ip(mod_field_vals['ip_src'])
    elif field_to_mod == 'ip_dst':
        act = action.action_set_nw_dst()
        act.nw_addr = parse.parse_ip(mod_field_vals['ip_dst'])
    elif field_to_mod == 'ip_tos':
        act = action.action_set_nw_tos()
        act.nw_tos = mod_field_vals['ip_tos']
    elif field_to_mod == 'tcp_sport':
        act = action.action_set_tp_src()
        act.tp_port = mod_field_vals['tcp_sport']
    elif field_to_mod == 'tcp_dport':
        act = action.action_set_tp_dst()
        act.tp_port = mod_field_vals['tcp_dport']
    elif field_to_mod == 'udp_sport':
        act = action.action_set_tp_src()
        act.tp_port = mod_field_vals['udp_sport']
    elif field_to_mod == 'udp_dport':
        act = action.action_set_tp_dst()
        act.tp_port = mod_field_vals['udp_dport']
    else:
        parent.assertTrue(0, "Unknown field to modify: " + str(field_to_mod))

    return act
예제 #2
0
def action_generate(parent, field_to_mod, mod_field_vals):
    """
    Create an action to modify the field indicated in field_to_mod

    @param parent Must implement, assertTrue
    @param field_to_mod The field to modify as a string name
    @param mod_field_vals Hash of values to use for modified values
    """

    act = None

    if field_to_mod in ['pktlen']:
        return None

    if field_to_mod == 'dl_dst':
        act = action.action_set_dl_dst()
        act.dl_addr = parse.parse_mac(mod_field_vals['dl_dst'])
    elif field_to_mod == 'dl_src':
        act = action.action_set_dl_src()
        act.dl_addr = parse.parse_mac(mod_field_vals['dl_src'])
    elif field_to_mod == 'dl_vlan_enable':
        if not mod_field_vals['dl_vlan_enable']:  # Strip VLAN tag
            act = action.action_strip_vlan()
        # Add VLAN tag is handled by dl_vlan field
        # Will return None in this case
    elif field_to_mod == 'dl_vlan':
        act = action.action_set_vlan_vid()
        act.vlan_vid = mod_field_vals['dl_vlan']
    elif field_to_mod == 'dl_vlan_pcp':
        act = action.action_set_vlan_pcp()
        act.vlan_pcp = mod_field_vals['dl_vlan_pcp']
    elif field_to_mod == 'ip_src':
        act = action.action_set_nw_src()
        act.nw_addr = parse.parse_ip(mod_field_vals['ip_src'])
    elif field_to_mod == 'ip_dst':
        act = action.action_set_nw_dst()
        act.nw_addr = parse.parse_ip(mod_field_vals['ip_dst'])
    elif field_to_mod == 'ip_tos':
        act = action.action_set_nw_tos()
        act.nw_tos = mod_field_vals['ip_tos']
    elif field_to_mod == 'tcp_sport':
        act = action.action_set_tp_src()
        act.tp_port = mod_field_vals['tcp_sport']
    elif field_to_mod == 'tcp_dport':
        act = action.action_set_tp_dst()
        act.tp_port = mod_field_vals['tcp_dport']
    else:
        parent.assertTrue(0, "Unknown field to modify: " + str(field_to_mod))

    return act
예제 #3
0
    def runTest(self):
        old_vid = 2
        sup_acts = supported_actions_get(self)
        if not (sup_acts & 1 << ofp.OFPAT_STRIP_VLAN):
            skip_message_emit(self, "Strip VLAN tag test")
            return

        len_w_vid = 104
        len = 100
        pkt = simple_tcp_packet(pktlen=len_w_vid, dl_vlan_enable=True, 
                                dl_vlan=old_vid)
        exp_pkt = simple_tcp_packet(pktlen=len)
        vid_act = action.action_strip_vlan()

        flow_match_test(self, pa_port_map, pkt=pkt, exp_pkt=exp_pkt,
                        action_list=[vid_act])
예제 #4
0
    def runTest(self):

        logging.info("Running Grp70No170 Strip Vlan tag test")

        old_vid = 2
        sup_acts = self.supported_actions
        if not (sup_acts & 1 << ofp.OFPAT_STRIP_VLAN):
            skip_message_emit(self, "Strip VLAN tag test")
            return

        len_w_vid = 104
        len = 100
        pkt = simple_tcp_packet(pktlen=len_w_vid, dl_vlan_enable=True,
                                dl_vlan=old_vid)
        exp_pkt = simple_tcp_packet(pktlen=len)
        vid_act = action.action_strip_vlan()

        flow_match_test(self, config["port_map"], pkt=pkt, exp_pkt=exp_pkt,
                        action_list=[vid_act])
예제 #5
0
    def runTest(self):

        logging = get_logger()
        logging.info("Running Grp70No160 Strip vlan header test")

        of_ports = config["port_map"].keys()
        of_ports.sort()
        self.assertTrue(len(of_ports) > 1, "Not enogh ports for test")

        rv = delete_all_flows(self.controller)
        self.assertEqual(rv, 0, "Failed to delete all flows")
        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")
        logging.info("Creating a vlan tagged packet")
        pkt = simple_tcp_packet(pktlen=104, dl_vlan_enable=True, dl_vlan=3)
        exp_pkt = simple_tcp_packet()
        match = parse.packet_to_flow_match(pkt)
        self.assertTrue(match is not None,
                        "Could not generate a match from the packet")

        match.wildcards = ofp.OFPFW_ALL ^ ofp.OFPFW_DL_VLAN
        msg = message.flow_mod()
        msg.outport = ofp.OFPP_NONE
        msg.command = ofp.OFPFC_ADD
        msg.buffer_id = 0xffffffff
        msg.match = match
        act = action.action_strip_vlan()
        self.assertTrue(msg.actions.add(act),
                        "could not add strip vlan action")
        act = action.action_output()
        act.port = of_ports[1]
        self.assertTrue(msg.actions.add(act), "could not add output action")

        logging.info("Installing a flow entry")
        rv = self.controller.message_send(msg)
        self.assertTrue(rv != -1, "Error Could not send a flow_mod")
        self.assertEqual(do_barrier(self.controller), 0, "Barrier failed")

        logging.info("sending a matching packet")

        self.dataplane.send(of_ports[0], str(pkt))
        receive_pkt_check(self.dataplane, exp_pkt, [of_ports[1]],
                          set(of_ports).difference([of_ports[1]]), self)
예제 #6
0
 def runTest(self):
     
     logging = get_logger()
     logging.info("Running Grp70No160 Strip vlan header test")
     
     of_ports = config["port_map"].keys()
     of_ports.sort()
     self.assertTrue(len(of_ports) > 1,"Not enogh ports for test")
     
     rv = delete_all_flows(self.controller)
     self.assertEqual(rv, 0, "Failed to delete all flows")
     self.assertEqual(do_barrier(self.controller),0,"Barrier failed")
     logging.info("Creating a vlan tagged packet")
     pkt = simple_tcp_packet(pktlen=104, dl_vlan_enable=True, dl_vlan=3)
     exp_pkt = simple_tcp_packet()
     match=parse.packet_to_flow_match(pkt)
     self.assertTrue(match is not None, "Could not generate a match from the packet")
     
     match.wildcards = ofp.OFPFW_ALL ^ofp.OFPFW_DL_VLAN
     msg = message.flow_mod()
     msg.outport=ofp.OFPP_NONE
     msg.command=ofp.OFPFC_ADD
     msg.buffer_id=0xffffffff
     msg.match=match
     act=action.action_strip_vlan()
     self.assertTrue(msg.actions.add(act), "could not add strip vlan action")
     act=action.action_output()
     act.port=of_ports[1]
     self.assertTrue(msg.actions.add(act),"could not add output action")
     
     logging.info("Installing a flow entry")
     rv=self.controller.message_send(msg)
     self.assertTrue(rv!=-1,"Error Could not send a flow_mod")
     self.assertEqual(do_barrier(self.controller),0,"Barrier failed")
     
     logging.info("sending a matching packet")
     
     self.dataplane.send(of_ports[0], str(pkt))
     receive_pkt_check(self.dataplane, exp_pkt, [of_ports[1]], set(of_ports).difference([of_ports[1]]),self)