import Queue

from oftest.testutils import *
from accton_util import *

def fill_mcast_pipeline_L3toL2(
	controller,
	logging,
	ports,
	is_ingress_tagged,
	is_egress_tagged,
	is_vlan_translated,
	is_max_vlan
	):
	"""
	This method, according to the scenario, fills properly
	the pipeline. The method generates using ports data the
	necessary information to fill the multicast pipeline and
	fills properly the pipeline which consists in this scenario:

	i) to create l2 interface groups;
	ii) to create l3 multicast groups;
	iii) to add multicast flows;
	iv) to add termination; flows;
	v) to add vlan flows

	Scenarios:
	1) ingress untagged, egress untagged
	2) ingress untagged, egress tagged
	3) ingress tagged, egress untagged
	4) ingress tagged, egress tagged, no translation
	5) ingress tagged, egress tagged, translation
	"""

	MAX_INTERNAL_VLAN           = 4094
	# Used for no translation
	FIXED_VLAN                  = 300
	Groups                      = Queue.LifoQueue( )
	L2_Groups                   = []
	port_to_in_vlan             = {}
	port_to_out_vlan            = {}
	port_to_src_mac             = {}
	port_to_src_mac_str         = {}
	port_to_dst_mac             = {}
	port_to_dst_mac_str         = {}
	port_to_src_ip              = {}
	port_to_src_ip_str          = {}
	src_ip_0                    = 0xc0a80100
	src_ip_0_str                = "192.168.1.%s"
	dst_ip                      = 0xe0000001
	switch_mac                  = [ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x00 ]

	for port in ports:
		in_vlan_id  = port + 1
		out_vlan_id = MAX_INTERNAL_VLAN - port
		if is_max_vlan and not is_vlan_translated:
			in_vlan_id  = MAX_INTERNAL_VLAN
			out_vlan_id = MAX_INTERNAL_VLAN
		elif not is_max_vlan and not is_vlan_translated:
			in_vlan_id  = FIXED_VLAN
			out_vlan_id = FIXED_VLAN
		src_mac                     = [ 0x00, 0x11, 0x11, 0x11, 0x11, port ]
		src_mac_str                 = ':'.join( [ '%02X' % x for x in src_mac ] )
		dst_mac                     = [ 0x01, 0x00, 0x5e, 0x01, 0x01, port ]
		dst_mac_str                 = ':'.join( [ '%02X' % x for x in dst_mac ] )
		src_ip                      = src_ip_0 + port
		src_ip_str                  = src_ip_0_str % port
		port_to_in_vlan[port]       = in_vlan_id
		port_to_out_vlan[port]      = out_vlan_id
		port_to_src_mac[port]       = src_mac
		port_to_src_mac_str[port]   = src_mac_str
		port_to_dst_mac[port]       = dst_mac
		port_to_dst_mac_str[port]   = dst_mac_str
		port_to_src_ip[port]        = src_ip
		port_to_src_ip_str[port]    = src_ip_str

	for in_port in ports:

		L2_Groups = []
		# add vlan flows table
		add_one_vlan_table_flow( controller, in_port, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_TAG )
		if not is_ingress_tagged:
			add_one_vlan_table_flow( controller, in_port, port_to_in_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
		elif is_vlan_translated:
			add_one_vlan_table_flow_translation( controller, in_port, port_to_in_vlan[in_port], port_to_out_vlan[in_port], flag=VLAN_TABLE_FLAG_ONLY_TAG)
		# add termination flow
		if not is_vlan_translated:
			add_termination_flow( controller, in_port, 0x0800, switch_mac, port_to_in_vlan[in_port] )
		else:
			add_termination_flow( controller, in_port, 0x0800, switch_mac, port_to_out_vlan[in_port] )

		for out_port in ports:
			if out_port == in_port:
				continue
			# add l2 interface group, vlan_id equals for each port and must coincide with mcast_group vlan_id
			if not is_vlan_translated:
				l2gid, msg = add_one_l2_interface_group( controller, out_port, vlan_id=port_to_in_vlan[in_port],
					is_tagged=is_egress_tagged, send_barrier=True )
			else:
				l2gid, msg = add_one_l2_interface_group( controller, out_port, vlan_id=port_to_out_vlan[in_port],
					is_tagged=is_egress_tagged, send_barrier=True )
			Groups._put( l2gid )
			L2_Groups.append( l2gid )

		# add l3 mcast group
		if not is_vlan_translated:
			mcat_group_msg = add_l3_mcast_group( controller, port_to_in_vlan[in_port], in_port, L2_Groups )
		else:
			mcat_group_msg = add_l3_mcast_group( controller, port_to_out_vlan[in_port], in_port, L2_Groups )
		Groups._put( mcat_group_msg.group_id )
		# add mcast routing flow
		if not is_vlan_translated:
			add_mcast4_routing_flow( controller, port_to_in_vlan[in_port], port_to_src_ip[in_port], 0, dst_ip, mcat_group_msg.group_id )
		else:
			add_mcast4_routing_flow( controller, port_to_out_vlan[in_port], port_to_src_ip[in_port], 0, dst_ip, mcat_group_msg.group_id )

	return (
		port_to_in_vlan,
		port_to_out_vlan,
		port_to_src_mac_str,
		port_to_dst_mac_str,
		port_to_src_ip_str,
		Groups
		)

def fill_mcast_pipeline_L3toL3(
    controller,
    logging,
    ports,
    is_ingress_tagged,
    is_egress_tagged,
    is_vlan_translated,
    is_max_vlan
    ):
    """
    This method, according to the scenario, fills properly
    the pipeline. The method generates using ports data the
    necessary information to fill the multicast pipeline and
    fills properly the pipeline which consists in this scenario:

    i) to create l2 interface groups;
    ii)to create l3 interface groups;
    iii) to create l3 multicast groups;
    iv) to add multicast flows;
    v) to add termination; flows;
    vi) to add vlan flows

    Scenarios:
    1) ingress tagged, egress tagged, translation
    """

    Groups                      = Queue.LifoQueue( )
    MAX_INTERNAL_VLAN           = 4094
    port_to_in_vlan             = {}
    port_to_out_vlan            = {}
    port_to_src_mac             = {}
    port_to_src_mac_str         = {}
    port_to_dst_mac             = {}
    port_to_dst_mac_str         = {}
    port_to_src_ip              = {}
    port_to_src_ip_str          = {}
    port_to_intf_src_mac        = {}
    port_to_intf_src_mac_str    = {}
    src_ip_0                    = 0xc0a80100
    src_ip_0_str                = "192.168.1.%s"
    dst_ip                      = 0xe0000001
    switch_mac                  = [ 0x01, 0x00, 0x5e, 0x00, 0x00, 0x00 ]

    for port in ports:
        in_vlan_id                     = port + 1
        out_vlan_id                    = MAX_INTERNAL_VLAN - port
        src_mac                        = [ 0x00, 0x11, 0x11, 0x11, 0x11, port ]
        src_mac_str                    = ':'.join( [ '%02X' % x for x in src_mac ] )
        dst_mac                        = [ 0x01, 0x00, 0x5e, 0x01, 0x01, port ]
        dst_mac_str                    = ':'.join( [ '%02X' % x for x in dst_mac ] )
        src_ip                         = src_ip_0 + port
        src_ip_str                     = src_ip_0_str % port
        intf_src_mac                   = [ 0x00, 0x00, 0x00, 0xcc, 0xcc, port ]
        intf_src_mac_str               = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
        port_to_in_vlan[port]          = in_vlan_id
        port_to_out_vlan[port]         = out_vlan_id
        port_to_src_mac[port]          = src_mac
        port_to_src_mac_str[port]      = src_mac_str
        port_to_dst_mac[port]          = dst_mac
        port_to_dst_mac_str[port]      = dst_mac_str
        port_to_src_ip[port]           = src_ip
        port_to_src_ip_str[port]       = src_ip_str
        port_to_intf_src_mac[port]     = intf_src_mac
        port_to_intf_src_mac_str[port] = intf_src_mac_str

    for port in ports:
        L3_Groups = []
        for other_port in ports:
            # add l2 interface group
            l2gid, msg = add_one_l2_interface_group( controller, other_port, vlan_id=port_to_out_vlan[other_port],
            is_tagged=True, send_barrier=False )
            Groups._put( l2gid )
            # add l3 interface group
            l3group_ucast_msg = add_l3_interface_group( controller, other_port, port_to_out_vlan[other_port], port_to_in_vlan[other_port],
            port_to_intf_src_mac[other_port] )
            L3_Groups.append(l3group_ucast_msg.group_id)
            Groups._put( l3group_ucast_msg.group_id )

        # add mcast group
        mcat_group_msg = add_l3_mcast_group( controller, port_to_in_vlan[port], port_to_in_vlan[port], L3_Groups )
        Groups._put( mcat_group_msg.group_id )
        # add mcast flow
        add_mcast4_routing_flow( controller, port_to_in_vlan[port], port_to_src_ip[port], 0, dst_ip, mcat_group_msg.group_id )
        # add termination flow
        add_termination_flow( controller, port, 0x0800, switch_mac, port_to_in_vlan[port] )
        # add vlan flow table
        add_one_vlan_table_flow( controller, port, port_to_in_vlan[port], flag=VLAN_TABLE_FLAG_ONLY_TAG )

    return (
        port_to_in_vlan,
        port_to_out_vlan,
        port_to_src_mac_str,
        port_to_dst_mac_str,
        port_to_src_ip_str,
        port_to_intf_src_mac_str,
        Groups
        )
