diff --git a/accton/vxlan_flow_test.py b/accton/vxlan_flow_test.py
index fcb840b..8977b7a 100755
--- a/accton/vxlan_flow_test.py
+++ b/accton/vxlan_flow_test.py
@@ -393,12 +393,6 @@
                                         vlan=access_port2_vid, vnid=vnid)
         logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", access_lport2, access_phy_port2, access_port2_vid, vnid);
         assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)            
-        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id, 
-		                                          dst_mac=dst_mac, 
-												  phy_port=network_port_phy_port, 
-												  vlan=network_port_vlan)
-        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", next_hop_id, dst_mac, network_port_phy_port, network_port_vlan);
-        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
         vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
                                                 lport=network_lport, 
                                                 src_ip=network_port_sip, dst_ip=network_port_dip,
@@ -542,12 +536,6 @@
                                         vlan=access_port2_vid, vnid=vnid)
         logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", access_lport2, access_phy_port2, access_port2_vid, vnid);
         assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)            
-        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id, 
-		                                          dst_mac=dst_mac, 
-												  phy_port=network_port_phy_port, 
-												  vlan=network_port_vlan)
-        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", next_hop_id, dst_mac, network_port_phy_port, network_port_vlan);
-        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
         vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
                                                 lport=network_lport, 
                                                 src_ip=network_port_sip, dst_ip=network_port_dip,
@@ -773,10 +761,338 @@
 
 class AccessWithNetwork(base_tests.SimpleDataPlane):
     def runTest(self):
+        """
+        first verify flood over unicast, 
+        second verify flood over mcast
+        """
+        if 	config["switch_ip"] == None:
+            logging.error("Doesn't configure switch IP")		
+            return
         delete_all_flows(self.controller)
         delete_all_groups(self.controller)
+
+        access_port1_vid=1
+        access_phy_port1=config["port_map"].keys()[0]
+        access_lport1=0x10001
+        access_lport1_mac=[0x00, 0x00, 0x00, 0x77, 0x77, 0x77]
+        access_lport1_mac_str=(":".join(map(str, map(hex, access_lport1_mac)))).replace("0x", "")
+        access_port2_vid=0
+        access_phy_port2=config["port_map"].keys()[1]
+        access_lport2=0x10002
+        access_lport2_mac=[0x00,0x00, 0x00, 0x00, 0x00, 0x02]
+        access_lport2_mac_str=(":".join(map(str, map(hex, access_lport2_mac)))).replace("0x", "")		
+        vnid=10
+        next_hop_id=1
+        next_hop_id_mcast=2
+        dst_mac="00:00:11:22:22:11"
+        mcast_ipv4="224.1.1.1"
+        dst_mac_mcast="01:00:5e:01:01:01"
+        network_port_phy_port=config["port_map"].keys()[2]
+        network_lport=0x10003
+        network_port_vlan=2
+        network_port_sip="192.168.1.1"
+        network_port_dip="192.168.2.1"
+        network_lport_mac=[0x00,0x00, 0x00, 0x00, 0x00, 0x03]
+        network_lport_mac_str=(":".join(map(str, map(hex, network_lport_mac)))).replace("0x", "")
+
+
+        
+        feature_reply=get_featureReplay(self)	
+        #get switch CPU mac
+        str_datapath_id_f= "{:016x}".format(feature_reply.datapath_id)        
+        str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])        
+        switch_cpu_mac_str=str_datapath_id[6:]
+        switch_cpu_mac = switch_cpu_mac_str.split(":")
+        switch_cpu_mac=[int(switch_cpu_mac[i],16) for i in range(0, len(switch_cpu_mac))]
+
+        #add config vtep/vtap/nexthop/vni        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id, 
+		                                          dst_mac=dst_mac, 
+												  phy_port=network_port_phy_port, 
+												  vlan=network_port_vlan)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", next_hop_id, dst_mac, network_port_phy_port, network_port_vlan);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)
+
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id_mcast, 
+		                                          dst_mac=dst_mac_mcast, 
+												  phy_port=network_port_phy_port, 
+												  vlan=network_port_vlan)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", next_hop_id, dst_mac, network_port_phy_port, network_port_vlan);
+
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)
+        
+        vni_config_xml=get_vni_config_xml(vni_id=vnid, mcast_ipv4=mcast_ipv4, next_hop_id=next_hop_id_mcast)
+        #vni_config_xml=get_vni_config_xml(vni_id=vnid, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", vnid);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+            
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=access_lport1, phy_port=access_phy_port1, 
+                                        vlan=access_port1_vid, vnid=vnid)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", access_lport1, access_phy_port1, access_port1_vid, vnid);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)
+
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=access_lport2, phy_port=access_phy_port2, 
+                                        vlan=access_port2_vid, vnid=vnid)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", access_lport2, access_phy_port2, access_port2_vid, vnid);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)            
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=network_lport, 
+                                                src_ip=network_port_sip, dst_ip=network_port_dip,
+                                                next_hop_id=next_hop_id, 
+                                                vnid=vnid)												
+        logging.info("config VTEP 0x%lx, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", network_lport, network_port_sip, network_port_dip, next_hop_id);                                                
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+
+        #add port table to have vxlan ability
+        add_port_table_flow(self.controller)
+        add_port_table_flow(self.controller, is_overlay=False)
+        
+        #for network port need l2 interface group to decide vlan tag or not
+        add_one_l2_interface_grouop(self.controller, network_port_phy_port, vlan_id=network_port_vlan)                
+        #add network mac
+        add_overlay_bridge_flow(self.controller, network_lport_mac, vnid, network_lport, False, True)
+        add_overlay_bridge_flow(self.controller, access_lport1_mac, vnid, access_lport1, False, True)
+
+        #add termination table for network port
+        add_termination_flow(self.controller, in_port=network_port_phy_port, eth_type=0x0800,
+                             dst_mac=switch_cpu_mac, vlanid=network_port_vlan)
+        #add vlan table for network port rx packet class vlan
+        add_one_vlan_table_flow(self.controller, of_port=network_port_phy_port, 
+                                vlan_id=network_port_vlan)
+
+        #tx packet on access lport 1        
+        parsed_pkt = simple_udp_packet(pktlen=96, eth_dst=network_lport_mac_str,
+                                       dl_vlan_enable= True,
+                                       vlan_vid=access_port1_vid)
+        pkt = str(parsed_pkt)
+        self.dataplane.send(access_phy_port1, pkt)
+        #verify packet on network port	
+        #need find a way to verify vxlan header        
+        parsed_pkt = simple_udp_packet(pktlen=92, eth_dst=network_lport_mac_str)
+        pkt = str(parsed_pkt) 
+        verify_packet(self, pkt, network_port_phy_port)        
+        verify_no_other_packets(self)
+        
+        #tx packet on network lport
+        inner_pkt = simple_udp_packet(pktlen=96, eth_dst=access_lport1_mac_str)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=switch_cpu_mac_str,
+                                        vnid=vnid, 
+                                        ip_dst= network_port_sip, 
+                                        ip_src=network_port_dip,
+                                        inner_payload=inner_pkt)
+        self.dataplane.send(network_port_phy_port, str(vxlan_pkt))
+        #verify
+        inner_pkt = simple_udp_packet(pktlen=100, eth_dst=access_lport1_mac_str,
+                                       dl_vlan_enable= True,
+                                       vlan_vid=access_port1_vid)
+        
+        verify_packet(self, inner_pkt, access_phy_port1)
+        verify_no_other_packets(self)
+
+
+		#exit verification so clear all configuration
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)
+
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=access_lport1, phy_port=access_phy_port1, 
+												vlan=access_port1_vid, vnid=vnid, operation="delete")
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=access_lport2, phy_port=access_phy_port2, 
+												vlan=access_port2_vid, vnid=vnid, operation="delete")
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)            
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=network_lport, 
+												src_ip=network_port_sip, dst_ip=network_port_dip, 
+												next_hop_id=next_hop_id, 
+												vnid=vnid, operation="delete")												
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        
+        vni_config_xml=get_vni_config_xml(vni_id=vnid, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id, 
+		                                          dst_mac=dst_mac, 
+												  phy_port=network_port_phy_port, 
+												  vlan=network_port_vlan, operation="delete")
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
+        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id_mcast, 
+		                                          dst_mac=dst_mac_mcast, 
+												  phy_port=network_port_phy_port, 
+												  vlan=network_port_vlan, operation="delete")
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
         
 class NetworkToNetwork(base_tests.SimpleDataPlane):
     def runTest(self):
+        """
+        This case can't work, can't identify it is chip limitation or not
+        """
+        return
+        if 	config["switch_ip"] == None:
+            logging.error("Doesn't configure switch IP")		
+            return
+			
         delete_all_flows(self.controller)
-        delete_all_groups(self.controller)        
\ No newline at end of file
+        delete_all_groups(self.controller)
+  
+        vnid=10
+        mcast_ipv4="224.1.1.1"
+        dst_mac_mcast="01:00:5e:01:01:01"       
+        next_hop_id_mcast=3
+
+        access_port1_vid=1
+        access_phy_port1=config["port_map"].keys()[0]
+        access_lport1=0x10001
+
+        network_port1_phy_port=config["port_map"].keys()[1]
+        network_lport1=0x10003
+        network_port1_vlan=2
+        network_port1_sip="192.168.1.1"
+        network_port1_dip="192.168.2.1"
+        network_port1_next_hop_id=1
+        network_port1_dst_mac="00:00:11:22:22:11"
+        network_lport1_mac=[0x00,0x00, 0x00, 0x00, 0x00, 0x33]
+        network_lport1_mac_str=(":".join(map(str, map(hex, network_lport1_mac)))).replace("0x", "")
+        
+        network_port2_phy_port=config["port_map"].keys()[2]
+        network_lport2=0x10004
+        network_port2_vlan=3
+        network_port2_sip="192.168.3.1"
+        network_port2_dip="192.168.4.1"
+        network_port2_next_hop_id=2
+        network_port2_dst_mac="00:00:11:22:22:22"
+        network_lport2_mac=[0x00,0x00, 0x00, 0x00, 0x00, 0x44]
+        network_lport2_mac_str=(":".join(map(str, map(hex, network_lport2_mac)))).replace("0x", "")
+        
+        feature_reply=get_featureReplay(self)	
+        #get switch CPU mac
+        str_datapath_id_f= "{:016x}".format(feature_reply.datapath_id)        
+        str_datapath_id=':'.join([str_datapath_id_f[i:i+2] for i in range(0, len(str_datapath_id_f), 2)])        
+        switch_cpu_mac_str=str_datapath_id[6:]
+        switch_cpu_mac = switch_cpu_mac_str.split(":")
+        switch_cpu_mac=[int(switch_cpu_mac[i],16) for i in range(0, len(switch_cpu_mac))]
+        #config vlxan
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=network_port1_next_hop_id, 
+		                                          dst_mac=network_port1_dst_mac, 
+												  phy_port=network_port1_phy_port, 
+												  vlan=network_port1_vlan)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", network_port1_next_hop_id, network_port1_dst_mac, network_port1_phy_port, network_port1_vlan);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=network_port2_next_hop_id, 
+		                                          dst_mac=network_port2_dst_mac, 
+												  phy_port=network_port2_phy_port, 
+												  vlan=network_port2_vlan)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", network_port2_next_hop_id, network_port2_dst_mac, network_port2_phy_port, network_port2_vlan);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)
+        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id_mcast, 
+		                                          dst_mac=dst_mac_mcast, 
+												  phy_port=network_port1_phy_port, 
+												  vlan=network_port1_vlan)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", next_hop_id_mcast, dst_mac_mcast, network_port1_phy_port, network_port1_vlan);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)
+        
+        vni_config_xml=get_vni_config_xml(vni_id=vnid, mcast_ipv4=mcast_ipv4, next_hop_id=next_hop_id_mcast)
+        logging.info("config VNI %lx", vnid);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+            
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=access_lport1, phy_port=access_phy_port1, 
+                                        vlan=access_port1_vid, vnid=vnid)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", access_lport1, access_phy_port1, access_port1_vid, vnid);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)
+
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=network_lport1, 
+                                                src_ip=network_port1_sip, dst_ip=network_port1_dip,
+                                                next_hop_id=network_port1_next_hop_id, 
+                                                vnid=vnid)												
+        logging.info("config VTEP 0x%lx, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", network_lport1, network_port1_sip, network_port1_dip, network_port1_next_hop_id);                                                
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=network_lport2, 
+                                                src_ip=network_port2_sip, dst_ip=network_port2_dip,
+                                                next_hop_id=network_port2_next_hop_id, 
+                                                vnid=vnid)												
+        logging.info("config VTEP 0x%lx, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", network_lport2, network_port2_sip, network_port2_dip, network_port2_next_hop_id);                                                
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+
+        #add port table to have vxlan ability
+        add_port_table_flow(self.controller)
+
+        #for network port need l2 interface group to decide vlan tag or not
+        add_one_l2_interface_grouop(self.controller, network_port1_phy_port, vlan_id=network_port1_vlan)        
+        add_one_l2_interface_grouop(self.controller, network_port2_phy_port, vlan_id=network_port2_vlan)                
+        #add network mac
+        add_overlay_bridge_flow(self.controller, network_lport1_mac, vnid, network_lport1, False, True)
+        add_overlay_bridge_flow(self.controller, network_lport2_mac, vnid, network_lport2, False, True)
+
+        #add termination table for network port
+        add_termination_flow(self.controller, in_port=network_port1_phy_port, eth_type=0x0800,
+                             dst_mac=switch_cpu_mac, vlanid=network_port1_vlan)
+        add_termination_flow(self.controller, in_port=network_port2_phy_port, eth_type=0x0800,
+                             dst_mac=switch_cpu_mac, vlanid=network_port2_vlan)                             
+        #add vlan table for network port rx packet class vlan
+        add_one_vlan_table_flow(self.controller, of_port=network_port1_phy_port, 
+                                vlan_id=network_port1_vlan)        
+        add_one_vlan_table_flow(self.controller, of_port=network_port2_phy_port, 
+                                vlan_id=network_port2_vlan)        
+        
+        #packet tx on network port 1 rx on network port 2
+        inner_pkt = simple_udp_packet(pktlen=96, eth_dst=network_lport2_mac_str)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=switch_cpu_mac_str,
+                                        vnid=vnid, 
+                                        ip_dst= network_port1_sip, 
+                                        ip_src=network_port1_dip,
+                                        inner_payload=inner_pkt)
+        self.dataplane.send(network_port1_phy_port, str(vxlan_pkt))        
+        #verify     
+        verify_packet(self, str(inner_pkt), network_port2_phy_port)
+        verify_no_other_packets(self)
+
+        
+        
+		#exit verification so clear all configuration
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)   
+        
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=access_lport1, phy_port=access_phy_port1, 
+												vlan=access_port1_vid, vnid=vnid, operation="delete")
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)
+          
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=network_lport1, 
+												src_ip=network_port1_sip, dst_ip=network_port1_dip, 
+												next_hop_id=network_port1_next_hop_id, 
+												vnid=vnid, operation="delete")												
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+		                                        lport=network_lport2, 
+												src_ip=network_port2_sip, dst_ip=network_port2_dip, 
+												next_hop_id=network_port2_next_hop_id, 
+												vnid=vnid, operation="delete")												
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)        
+        vni_config_xml=get_vni_config_xml(vni_id=vnid, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=network_port1_next_hop_id, 
+		                                          dst_mac=network_port1_dst_mac, 
+												  phy_port=network_port1_phy_port, 
+												  vlan=network_port1_vlan, operation="delete")
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=network_port2_next_hop_id, 
+		                                          dst_mac=network_port2_dst_mac, 
+												  phy_port=network_port2_phy_port, 
+												  vlan=network_port2_vlan, operation="delete")
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)        
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=next_hop_id_mcast, 
+		                                          dst_mac=dst_mac_mcast, 
+												  phy_port=network_port1_phy_port, 
+												  vlan=network_port1_vlan, operation="delete")
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml) == True)
+        
\ No newline at end of file
