def add_port_ingress_vlan_flow(datapath, vlan_id, is_tag, port_id): ofproto = datapath.ofproto parser = datapath.ofproto_parser actions = [parser.OFPActionSetField(vlan_vid=vlan_id)] inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions), parser.OFPInstructionGotoTable(20)] match = parser.OFPMatch() if is_tag: match.set_vlan_vid_masked(vlan_id, 0x1fff) else: match.set_vlan_vid_masked(0, 0x0fff) match.set_in_port(port_id) msg_util.add_flow(datapath ,10 ,1, match , inst)
def add_client(datapath, vlan_id, mac_addr, port, is_tag): ofproto = datapath.ofproto parser = datapath.ofproto_parser # add egress group # print "add client %d, %d %d, %s"%(vlan_id, is_tag, port, mac_addr) l2_intf_group_id = vlan_util.add_port_egress_group(datapath, vlan_id, is_tag, port) # add vlan table flow to rx packet, BCM bug? if add untag, shall add rx tag, too. vlan_util.add_port_ingress_vlan_flow(datapath, vlan_id, True, port) if is_tag == False: vlan_util.add_port_ingress_vlan_flow(datapath, vlan_id, False, port) # add bridge flow actions = [parser.OFPActionGroup(l2_intf_group_id)] match = parser.OFPMatch(vlan_vid=vlan_id, eth_dst=mac_addr) inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions), parser.OFPInstructionGotoTable(60)] msg_util.add_flow(datapath, 50, 1, match, inst)
def create_dlf_flow(datapath, vlan_id, to_controller, dlf_group_id): ofproto = datapath.ofproto parser = datapath.ofproto_parser match = parser.OFPMatch() match.set_vlan_vid(vlan_id) if to_controller: actions_c = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER)] actions_g = [parser.OFPActionGroup(dlf_group_id)] if to_controller: inst = [ parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions_c), parser.OFPInstructionActions(ofproto.OFPIT_WRITE_ACTIONS, actions_g), parser.OFPInstructionGotoTable(60), ] else: inst = [ parser.OFPInstructionActions(ofproto.OFPIT_WRITE_ACTIONS, actions_g), parser.OFPInstructionGotoTable(60), ] msg_util.add_flow(datapath, 50, 1, match, inst)