Ejemplo n.º 1
0
    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)	
		
		
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)