示例#1
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)
示例#2
0
    def create_dlf_group(datapath, vlan_id, port_list):
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        groups = Set()
        for port in port_list:
            # collect group_id
            groups.add(vlan_util.add_port_egress_group(datapath, vlan_id, False, port))

        bucket_actions = []
        for group_id in groups:
            bucket_actions.append(parser.OFPActionGroup(group_id))

        buckets = []
        for bk_action in bucket_actions:
            buckets.append(parser.OFPBucket(weight=100, watch_port=0, watch_group=0, actions=bk_action))

        dlf_group_id = bridge_util.encode_group_dlf(vlan_id)
        msg_util.add_group(datapath, ofproto.OFPGT_ALL, dlf_group_id, buckets)
        return dlf_group_id