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
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
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])
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])
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)
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)