diff --git a/application_example/virtualRouter.py b/application_example/virtualRouter.py
new file mode 100755
index 0000000..166b67f
--- /dev/null
+++ b/application_example/virtualRouter.py
@@ -0,0 +1,840 @@
+"""
+This case test VM routing on same VNID
+"""
+
+import logging
+
+from oftest import config
+import oftest.base_tests as base_tests
+import ofp
+from oftest.testutils import *
+from accton_util import *
+
+NW1_ACCESS_LPORT=0x10001
+NW2_ACCESS_LPORT=0x10002        
+NW1_NEWORK_LPORT=0x10003
+NW2_NEWORK_LPORT=0x10004        
+
+NW1_VRF=1
+NW2_VRF=2
+NW_VRF=[NW1_VRF, NW2_VRF]
+SWITCH_VRF=0
+assert(NW1_VRF!=SWITCH_VRF)
+assert(NW2_VRF!=SWITCH_VRF)
+NW1_VNID=1
+NW2_VNID=2
+NW_VNID=[NW1_VNID, NW2_VNID]
+
+
+NW1_VLAN = 2
+NW2_VLAN = 3
+NW_VLAN=[NW1_VLAN, NW2_VLAN]
+SWITCH_VLAN=1
+
+#SWITCH_INTF_MAC = from feature.replay, because each switch is not the same, 
+#                  current we just can use switch CPU MAC, due to tunnel terminator 
+#                  have no way to set mac
+#SWITCH_INTF_MAC_STR
+SWITCH_IP=0XC0A80101 #192.168.1.1
+SWITCH_IP_STR=convertIP4toStr(SWITCH_IP)
+#H1 for NW1, H2 for NW2
+#remember for chip limitaion, it can't have nexthop 
+#has same vid, port but diff dst_mac
+VXLAN_TNL_H1_IP=0XC0A80202#192.168.2.2
+VXLAN_TNL_H1_IP_STR=convertIP4toStr(VXLAN_TNL_H1_IP)
+VXLAN_TNL_H1_MAC=[0x00, 0x31, 0x31, 0x31, 0x31, 0x31] #like router MAC
+VXLAN_TNL_H1_MAC_STR=convertMACtoStr(VXLAN_TNL_H1_MAC)
+VXLAN_TNL_H2_IP=0XC0A80303#192.168.3.3
+VXLAN_TNL_H2_IP_STR=convertIP4toStr(VXLAN_TNL_H2_IP)
+VXLAN_TNL_H2_MAC=[0x00, 0x31, 0x31, 0x31, 0x31, 0x31] #like router MAC
+VXLAN_TNL_H2_MAC_STR=convertMACtoStr(VXLAN_TNL_H2_MAC)
+VXLAN_TNL_H_R_MAC=[0x00, 0x31, 0x31, 0x31, 0x31, 0x31]
+VXLAN_TNL_H_R_MAC_STR=convertMACtoStr(VXLAN_TNL_H_R_MAC)
+VXLAN_TNL_H_R_NHP_ID=1
+
+NW1_VM1_IP = 0XC0A80101
+NW1_VM1_IP_STR = convertIP4toStr(NW1_VM1_IP)
+NW1_VM1_MAC=[0x00, 0x11, 0x11, 0x11, 0x11, 0x11]
+NW1_VM1_MAC_STR=convertMACtoStr(NW1_VM1_MAC)
+NW1_VM2_IP = 0XC0A80201
+NW1_VM2_IP_STR = convertIP4toStr(NW1_VM2_IP)
+NW1_VM2_MAC=[0x00, 0x12, 0x12, 0x12, 0x12, 0x12]
+NW1_VM2_MAC_STR=convertMACtoStr(NW1_VM2_MAC)
+NW2_VM1_IP = 0XC0A80101
+NW2_VM1_IP_STR = convertIP4toStr(NW2_VM1_IP)
+NW2_VM1_MAC=[0x00, 0x21, 0x21, 0x21, 0x21, 0x21]
+NW2_VM1_MAC_STR=convertMACtoStr(NW2_VM1_MAC)
+NW2_VM2_IP = 0XC0A80201        
+NW2_VM2_IP_STR = convertIP4toStr(NW2_VM2_IP)
+NW2_VM2_MAC=[0x00, 0x22, 0x22, 0x22, 0x22, 0x22]
+NW2_VM2_MAC_STR=convertMACtoStr(NW2_VM2_MAC)        
+
+NW1_GW_MAC=[0x00, 0x00, 0x00, 0x00, 0x11, 0x11]
+NW1_GW_MAC_STR=convertMACtoStr(NW1_GW_MAC)
+NW1_ROUTE1             =NW1_VM1_IP
+NW1_ROUTE1_STR         =NW1_VM1_IP_STR
+NW1_ROUTE1_NEXT_HOP_MAC=NW1_VM1_MAC
+NW1_ROUTE2             =NW1_VM2_IP
+NW1_ROUTE2_NEXT_HOP_MAC=NW1_VM2_MAC
+NW1_ROUTE2_STR         =NW1_VM2_IP_STR
+NW1_GW_ROUTE    =[NW1_ROUTE1, NW1_ROUTE2]
+NW1_GW_ROUTE_STR=[NW1_ROUTE1_STR, NW1_ROUTE2_STR]
+NW1_GW_ROUTE_NHP=[NW1_ROUTE1_NEXT_HOP_MAC, NW1_ROUTE2_NEXT_HOP_MAC]
+
+NW2_GW_MAC=[0x00, 0x00, 0x00, 0x00, 0x22, 0x22]
+NW2_GW_MAC_STR=convertMACtoStr(NW2_GW_MAC)
+NW2_ROUTE1             =NW2_VM1_IP
+NW2_ROUTE1_STR         =NW2_VM1_IP_STR
+NW2_ROUTE1_NEXT_HOP_MAC=NW2_VM1_MAC
+NW2_ROUTE2             =NW2_VM2_IP
+NW2_ROUTE2_STR         =NW2_VM1_IP_STR
+NW2_ROUTE2_NEXT_HOP_MAC=NW2_VM2_MAC
+NW2_GW_ROUT_STR=[NW2_ROUTE1_STR, NW2_ROUTE2_STR]
+
+NW_GW_MAC=[NW1_GW_MAC, NW2_GW_MAC]
+NW_GW_MAC_STR=[NW1_GW_MAC_STR, NW2_GW_MAC_STR]
+
+
+#make sure array has same length
+assert(len(NW_GW_MAC) == len(NW_GW_MAC_STR))
+assert(len(NW_GW_MAC) == len(NW_VLAN))
+
+class vrouterSameVNIRouting(base_tests.SimpleDataPlane):
+    """
+    Topology:
+    === switch inner pipeline
+    --- switch forn port physical link    
+    R: router
+    NP:netowrk port
+    AP:Access port
+    LP:loopback port
+    H1(VM1/VM2) --  R ----------- NP ==== AP --- LP
+    H2 --
+    
+    VM1(192.168.1.1, NW1_VNID) <--> VM2(192.168.2.1, NW1_VNID)    
+    VM1(192.168.1.1, NW2_VNID) <--> VM2(192.168.2.1, NW2_VNID)    
+    
+    Inner operation:
+      (decap/encap vxlan header)NP==(bridge inner DMAC)==AP(VNID->VLANID)----(VLANID->VRF)LP
+      
+     
+    
+    """
+    def runTest(self):
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)
+                
+        ACCESS_PORT=config["port_map"].keys()[0]
+        NETWORK_PORT=config["port_map"].keys()[1]
+        LOOPBACK_PORT=config["port_map"].keys()[2]
+        print "access %ld, network %ld, loopback %ld"%(ACCESS_PORT, NETWORK_PORT, LOOPBACK_PORT)        
+        """ add vxlan config"""
+        feature_reply=get_featureReplay(self)	
+        SWITCH_INTF_MAC_STR, SWITCH_INTF_MAC=getSwitchCpuMACFromDPID(feature_reply.datapath_id)
+        #add vni        
+        vni_config_xml=get_vni_config_xml(vni_id=NW1_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=NW2_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", NW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        #add access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=NW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW1_VLAN, vnid=NW1_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW1_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_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=NW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW2_VLAN, vnid=NW2_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW2_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #create next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)   
+        #create network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=NW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW1_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW1_NEWORK_LPORT, NW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=NW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW2_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW2_NEWORK_LPORT, NW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        
+        
+        """add routing flow"""    
+        #add port table to have vxlan ability
+        add_port_table_flow(self.controller)
+        #add l2 interface group
+        add_one_l2_interface_grouop(self.controller, NETWORK_PORT, vlan_id=SWITCH_VLAN, is_tagged=True, send_barrier=False)
+        for i in range(len(NW_VLAN)):        
+            add_one_l2_interface_grouop(self.controller, LOOPBACK_PORT, vlan_id=NW_VLAN[i], is_tagged=True, send_barrier=False)
+
+		#add vlan flow table
+        add_one_vlan_table_flow(self.controller, NETWORK_PORT, SWITCH_VLAN, vrf=SWITCH_VRF, flag=VLAN_TABLE_FLAG_ONLY_BOTH)
+
+        for i in range(len(NW_VLAN)):
+            add_one_vlan_table_flow(self.controller, LOOPBACK_PORT, NW_VLAN[i], vrf=NW_VRF[i], flag=VLAN_TABLE_FLAG_ONLY_TAG)
+        #add vxlan bridge flow
+        add_overlay_bridge_flow(self.controller, NW1_GW_MAC, NW1_VNID, NW1_ACCESS_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, NW2_GW_MAC, NW2_VNID, NW2_ACCESS_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, NW1_VM1_MAC, NW1_VNID, NW1_NEWORK_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, NW1_VM2_MAC, NW1_VNID, NW1_NEWORK_LPORT, False, False)        
+        add_overlay_bridge_flow(self.controller, NW2_VM1_MAC, NW2_VNID, NW2_NEWORK_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, NW2_VM2_MAC, NW2_VNID, NW2_NEWORK_LPORT, False, False)
+        
+		#add termination flow
+        add_termination_flow(self.controller, NETWORK_PORT, 0x0800, SWITCH_INTF_MAC, SWITCH_VLAN)
+        for i in range(len(NW_VLAN)):
+            add_termination_flow(self.controller, LOOPBACK_PORT, 0x0800, NW_GW_MAC[i], NW_VLAN[i])        
+
+        """
+        Add Network Route, NW1
+        192.168.1.1
+        192.168.2.1
+        """
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=NW1_VLAN, id=0x1001, src_mac=NW1_GW_MAC, dst_mac=NW1_ROUTE1_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, NW1_ROUTE1, 0, l3_msg.group_id, NW1_VRF)
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=NW1_VLAN, id=0x1002, src_mac=NW1_GW_MAC, dst_mac=NW1_ROUTE2_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, NW1_ROUTE2, 0, l3_msg.group_id, NW1_VRF)
+        """
+        Add Network Route, NW2
+        192.168.1.1
+        192.168.2.1
+        """
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=NW2_VLAN, id=0x2001, src_mac=NW2_GW_MAC, dst_mac=NW2_ROUTE1_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, NW2_ROUTE1, 0, l3_msg.group_id, NW2_VRF)
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=NW2_VLAN, id=0x2002, src_mac=NW2_GW_MAC, dst_mac=NW2_ROUTE2_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, NW2_ROUTE2, 0, l3_msg.group_id, NW2_VRF)
+        
+
+        """
+        Send paket to verify, NW1
+        """        
+        #tx packet on network lport
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src = NW1_VM1_MAC_STR
+                                      , eth_dst=NW1_GW_MAC_STR
+                                      , ip_dst =NW1_VM2_IP_STR 
+                                      , ip_src =NW1_VM1_IP_STR
+                                      , ip_ttl =64)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=SWITCH_INTF_MAC_STR
+                                        ,eth_src=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=NW1_VNID
+                                        ,ip_dst= SWITCH_IP_STR
+                                        ,ip_src=VXLAN_TNL_H1_IP_STR
+                                        ,inner_payload=inner_pkt)
+        self.dataplane.send(NETWORK_PORT, str(vxlan_pkt))
+        #verify rx on access port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src= NW1_VM1_MAC_STR
+                                      , eth_dst=NW1_GW_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=NW1_VLAN
+                                      , ip_dst =NW1_VM2_IP_STR 
+                                      , ip_src =NW1_VM1_IP_STR
+                                      , ip_ttl =64)
+        verify_packet(self, str(inner_pkt), ACCESS_PORT)
+        verify_no_other_packets(self)
+        
+        #tx on loopback port
+        self.dataplane.send(LOOPBACK_PORT, str(inner_pkt))
+        #verify rx on loopback port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src=NW1_GW_MAC_STR
+                                      , eth_dst=NW1_VM2_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=NW1_VLAN                                      
+                                      , ip_dst =NW1_VM2_IP_STR
+                                      , ip_src =NW1_VM1_IP_STR
+                                      , ip_ttl =63)
+        verify_packet(self, str(inner_pkt), LOOPBACK_PORT)
+        verify_no_other_packets(self)
+        #tx on access port
+        self.dataplane.send(ACCESS_PORT, str(inner_pkt))        
+        #verify rx on network port
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src=NW1_GW_MAC_STR
+                                      , eth_dst=NW1_VM2_MAC_STR
+                                      , ip_dst =NW1_VM2_IP_STR
+                                      , ip_src =NW1_VM1_IP_STR
+                                      , ip_ttl =63)
+        vxlan_pkt = simple_vxlan_packet(eth_src=SWITCH_INTF_MAC_STR
+                                        ,eth_dst=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=NW1_VNID
+                                        ,ip_dst=VXLAN_TNL_H1_IP_STR
+                                        ,ip_src=SWITCH_IP_STR
+                                        ,inner_payload=inner_pkt)        
+        verify_packet(self, inner_pkt, NETWORK_PORT)
+        verify_no_other_packets(self) 
+
+
+        """
+        Send paket to verify, NW2
+        """        
+        #tx packet on network lport
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src = NW2_VM1_MAC_STR
+                                      , eth_dst=NW2_GW_MAC_STR
+                                      , ip_dst =NW2_VM2_IP_STR 
+                                      , ip_src =NW2_VM1_IP_STR
+                                      , ip_ttl =64)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=SWITCH_INTF_MAC_STR
+                                        ,eth_src=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=NW2_VNID
+                                        ,ip_dst= SWITCH_IP_STR
+                                        ,ip_src=VXLAN_TNL_H1_IP_STR
+                                        ,inner_payload=inner_pkt)
+        self.dataplane.send(NETWORK_PORT, str(vxlan_pkt))
+        #verify rx on access port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src= NW2_VM1_MAC_STR
+                                      , eth_dst=NW2_GW_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=NW2_VLAN
+                                      , ip_dst =NW2_VM2_IP_STR 
+                                      , ip_src =NW2_VM1_IP_STR
+                                      , ip_ttl =64)
+        verify_packet(self, str(inner_pkt), ACCESS_PORT)
+        verify_no_other_packets(self)
+        
+        #tx on loopback port
+        self.dataplane.send(LOOPBACK_PORT, str(inner_pkt))
+        #verify rx on loopback port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src=NW2_GW_MAC_STR
+                                      , eth_dst=NW2_VM2_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=NW2_VLAN                                      
+                                      , ip_dst =NW2_VM2_IP_STR
+                                      , ip_src =NW2_VM1_IP_STR
+                                      , ip_ttl =63)
+        verify_packet(self, str(inner_pkt), LOOPBACK_PORT)
+        verify_no_other_packets(self)
+        #tx on access port
+        self.dataplane.send(ACCESS_PORT, str(inner_pkt))        
+        #verify rx on network port
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src=NW2_GW_MAC_STR
+                                      , eth_dst=NW2_VM2_MAC_STR
+                                      , ip_dst =NW2_VM2_IP_STR
+                                      , ip_src =NW2_VM1_IP_STR
+                                      , ip_ttl =63)
+        vxlan_pkt = simple_vxlan_packet(eth_src=SWITCH_INTF_MAC_STR
+                                        ,eth_dst=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=NW2_VNID
+                                        ,ip_dst=VXLAN_TNL_H1_IP_STR
+                                        ,ip_src=SWITCH_IP_STR
+                                        ,inner_payload=inner_pkt)        
+        verify_packet(self, inner_pkt, NETWORK_PORT)
+        verify_no_other_packets(self) 
+
+        """clear all flow/group and configuration
+        """
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)
+        """ del vxlan config"""
+        #delete access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=NW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW1_VLAN, vnid=NW1_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW1_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_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=NW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW2_VLAN, vnid=NW2_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW2_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #delete network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=NW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW1_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW1_NEWORK_LPORT, NW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=NW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW2_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW2_NEWORK_LPORT, NW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        #delete next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN, operation="delete")        
+        logging.info("delete config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)                   
+        #del vni
+        vni_config_xml=get_vni_config_xml(vni_id=NW1_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=NW2_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", NW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+
+#for routing on different VNID, it can't have same subnet.
+TNW1_ACCESS_LPORT=0x10001
+TNW2_ACCESS_LPORT=0x10002        
+TNW1_NEWORK_LPORT=0x10003
+TNW2_NEWORK_LPORT=0x10004        
+
+TNW1_VRF=2 #all shall the same
+TNW2_VRF=2
+TNW_VRF=[TNW1_VRF, TNW2_VRF]
+TSWITCH_VRF=0 #let switch different from VM
+assert(TNW2_VRF!=TSWITCH_VRF)
+assert(TNW1_VRF!=TSWITCH_VRF)
+
+TNW1_VNID=1
+TNW2_VNID=2
+TNW_VNID=[TNW1_VNID, TNW2_VNID]
+
+TNW1_VLAN = 2
+TNW2_VLAN = 3
+TNW_VLAN=[TNW1_VLAN, TNW2_VLAN]
+assert(TNW1_VLAN!=SWITCH_VLAN)
+assert(TNW2_VLAN!=SWITCH_VLAN)
+#the subnet shall not the same, because they all NW use same VRF
+TNW1_VM1_IP = 0XC0A80101  #192.168.1.1
+TNW1_VM1_IP_STR = convertIP4toStr(TNW1_VM1_IP)
+TNW1_VM1_MAC=[0x00, 0x11, 0x11, 0x11, 0x11, 0x11]
+TNW1_VM1_MAC_STR=convertMACtoStr(TNW1_VM1_MAC)
+TNW1_VM2_IP = 0XC0A80201  #192.168.2.1
+TNW1_VM2_IP_STR = convertIP4toStr(TNW1_VM2_IP)
+TNW1_VM2_MAC=[0x00, 0x12, 0x12, 0x12, 0x12, 0x12]
+TNW1_VM2_MAC_STR=convertMACtoStr(TNW1_VM2_MAC)
+TNW2_VM1_IP = 0XC0A80301  #192.168.3.1
+TNW2_VM1_IP_STR = convertIP4toStr(TNW2_VM1_IP)
+TNW2_VM1_MAC=[0x00, 0x21, 0x21, 0x21, 0x21, 0x21]
+TNW2_VM1_MAC_STR=convertMACtoStr(TNW2_VM1_MAC)
+TNW2_VM2_IP = 0XC0A80401  #192.168.4.1     
+TNW2_VM2_IP_STR = convertIP4toStr(TNW2_VM2_IP)
+TNW2_VM2_MAC=[0x00, 0x22, 0x22, 0x22, 0x22, 0x22]
+TNW2_VM2_MAC_STR=convertMACtoStr(TNW2_VM2_MAC)        
+
+TNW1_GW_MAC=[0x00, 0x00, 0x00, 0x00, 0x11, 0x11]
+TNW1_GW_MAC_STR=convertMACtoStr(TNW1_GW_MAC)
+TNW1_ROUTE1             =TNW1_VM1_IP
+TNW1_ROUTE1_STR         =TNW1_VM1_IP_STR
+TNW1_ROUTE1_NEXT_HOP_MAC=TNW1_VM1_MAC
+TNW1_ROUTE2             =TNW1_VM2_IP
+TNW1_ROUTE2_NEXT_HOP_MAC=TNW1_VM2_MAC
+TNW1_ROUTE2_STR         =TNW1_VM2_IP_STR
+TNW1_GW_ROUTE    =[TNW1_ROUTE1, TNW1_ROUTE2]
+TNW1_GW_ROUTE_STR=[TNW1_ROUTE1_STR, TNW1_ROUTE2_STR]
+TNW1_GW_ROUTE_NHP=[TNW1_ROUTE1_NEXT_HOP_MAC, TNW1_ROUTE2_NEXT_HOP_MAC]
+
+TNW2_GW_MAC=[0x00, 0x00, 0x00, 0x00, 0x22, 0x22]
+TNW2_GW_MAC_STR=convertMACtoStr(TNW2_GW_MAC)
+TNW2_ROUTE1             =TNW2_VM1_IP
+TNW2_ROUTE1_STR         =TNW2_VM1_IP_STR
+TNW2_ROUTE1_NEXT_HOP_MAC=TNW2_VM1_MAC
+TNW2_ROUTE2             =TNW2_VM2_IP
+TNW2_ROUTE2_STR         =TNW2_VM1_IP_STR
+TNW2_ROUTE2_NEXT_HOP_MAC=TNW2_VM2_MAC
+TNW2_GW_ROUT_STR=[TNW2_ROUTE1_STR, TNW2_ROUTE2_STR]
+
+TNW_GW_MAC=[TNW1_GW_MAC, TNW2_GW_MAC]
+TNW_GW_MAC_STR=[TNW1_GW_MAC_STR, TNW2_GW_MAC_STR]
+
+
+        
+class vrouterDiffVnidRouting(base_tests.SimpleDataPlane):
+    """
+    Topology:
+    === switch inner pipeline
+    --- switch forn port physical link    
+    R: router
+    NP:netowrk port
+    AP:Access port
+    LP:loopback port
+    H1(VM1/VM2) --  R ----------- NP ==== AP --- LP
+    H2 --
+    
+    VM1(192.168.1.1, NW1_VNID) <--> VM2(192.168.2.1, NW1_VNID)    
+    VM1(192.168.1.1, NW2_VNID) <--> VM2(192.168.2.1, NW2_VNID)    
+    
+    Inner operation:
+      (decap/encap vxlan header)NP==(bridge inner DMAC)==AP(VNID->VLANID)----(VLANIDx->same VRF)LP
+
+    """
+    def runTest(self):
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)
+                
+        ACCESS_PORT=config["port_map"].keys()[0]
+        NETWORK_PORT=config["port_map"].keys()[1]
+        LOOPBACK_PORT=config["port_map"].keys()[2]
+        print "access %ld, network %ld, loopback %ld"%(ACCESS_PORT, NETWORK_PORT, LOOPBACK_PORT)        
+        """ add vxlan config"""
+        feature_reply=get_featureReplay(self)	
+        SWITCH_INTF_MAC_STR, SWITCH_INTF_MAC=getSwitchCpuMACFromDPID(feature_reply.datapath_id)
+        #add vni        
+        vni_config_xml=get_vni_config_xml(vni_id=TNW1_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", TNW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=TNW2_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", TNW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        #add access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=TNW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=TNW1_VLAN, vnid=TNW1_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", TNW1_ACCESS_LPORT, ACCESS_PORT, TNW1_VLAN, TNW1_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=TNW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=TNW2_VLAN, vnid=TNW2_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", TNW2_ACCESS_LPORT, ACCESS_PORT, TNW1_VLAN, NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #create next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)   
+        #create network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=TNW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=TNW1_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", TNW1_NEWORK_LPORT, TNW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=TNW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=TNW2_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", TNW2_NEWORK_LPORT, TNW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        
+        
+        """add routing flow"""    
+        #add port table to have vxlan ability
+        add_port_table_flow(self.controller)
+        #add l2 interface group
+        add_one_l2_interface_grouop(self.controller, NETWORK_PORT, vlan_id=SWITCH_VLAN, is_tagged=True, send_barrier=False)
+        for i in range(len(TNW_VLAN)):        
+            add_one_l2_interface_grouop(self.controller, LOOPBACK_PORT, vlan_id=TNW_VLAN[i], is_tagged=True, send_barrier=False)
+
+		#add vlan flow table
+        add_one_vlan_table_flow(self.controller, NETWORK_PORT, SWITCH_VLAN, vrf=SWITCH_VRF, flag=VLAN_TABLE_FLAG_ONLY_BOTH)
+        for i in range(len(TNW_VLAN)):
+            add_one_vlan_table_flow(self.controller, LOOPBACK_PORT, TNW_VLAN[i], vrf=TNW_VRF[i], flag=VLAN_TABLE_FLAG_ONLY_TAG)
+            
+        #add vxlan bridge flow
+        add_overlay_bridge_flow(self.controller, TNW1_GW_MAC, TNW1_VNID, TNW1_ACCESS_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, TNW2_GW_MAC, TNW2_VNID, TNW2_ACCESS_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, TNW1_VM1_MAC, TNW1_VNID, TNW1_NEWORK_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, TNW1_VM2_MAC, TNW1_VNID, TNW1_NEWORK_LPORT, False, False)        
+        add_overlay_bridge_flow(self.controller, TNW2_VM1_MAC, TNW2_VNID, TNW2_NEWORK_LPORT, False, False)
+        add_overlay_bridge_flow(self.controller, TNW2_VM2_MAC, TNW2_VNID, TNW2_NEWORK_LPORT, False, False)
+        
+		#add termination flow
+        add_termination_flow(self.controller, NETWORK_PORT, 0x0800, SWITCH_INTF_MAC, SWITCH_VLAN)
+        for i in range(len(TNW_VLAN)):
+            add_termination_flow(self.controller, LOOPBACK_PORT, 0x0800, TNW_GW_MAC[i], TNW_VLAN[i])        
+
+        """
+        Add Network Route, TNW1
+        192.168.1.1
+        192.168.2.1
+        """
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=TNW1_VLAN, id=0x1001, src_mac=TNW1_GW_MAC, dst_mac=TNW1_ROUTE1_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, TNW1_ROUTE1, 0, l3_msg.group_id, TNW1_VRF)
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=TNW1_VLAN, id=0x1002, src_mac=TNW1_GW_MAC, dst_mac=TNW1_ROUTE2_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, TNW1_ROUTE2, 0, l3_msg.group_id, TNW1_VRF)
+        """
+        Add Network Route, TNW2
+        192.168.1.1
+        192.168.2.1
+        """
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=TNW2_VLAN, id=0x2001, src_mac=TNW1_GW_MAC, dst_mac=TNW2_ROUTE1_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, TNW2_ROUTE1, 0, l3_msg.group_id, TNW2_VRF)
+        l3_msg=add_l3_unicast_group(self.controller, LOOPBACK_PORT, vlanid=TNW2_VLAN, id=0x2002, src_mac=TNW2_GW_MAC, dst_mac=TNW2_ROUTE2_NEXT_HOP_MAC)
+        add_unicast_routing_flow(self.controller, 0x0800, TNW2_ROUTE2, 0, l3_msg.group_id, TNW2_VRF)
+        
+
+        """
+        Send paket to verify, TNW1
+        """        
+        #tx packet on network lport
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src = TNW1_VM1_MAC_STR
+                                      , eth_dst=TNW1_GW_MAC_STR
+                                      , ip_dst =TNW1_VM2_IP_STR 
+                                      , ip_src =TNW1_VM1_IP_STR
+                                      , ip_ttl =64)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=SWITCH_INTF_MAC_STR
+                                        ,eth_src=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=TNW1_VNID
+                                        ,ip_dst= SWITCH_IP_STR
+                                        ,ip_src=VXLAN_TNL_H1_IP_STR
+                                        ,inner_payload=inner_pkt)
+        self.dataplane.send(NETWORK_PORT, str(vxlan_pkt))
+        #verify rx on access port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src= TNW1_VM1_MAC_STR
+                                      , eth_dst=TNW1_GW_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=TNW1_VLAN
+                                      , ip_dst =TNW1_VM2_IP_STR 
+                                      , ip_src =TNW1_VM1_IP_STR
+                                      , ip_ttl =64)
+        verify_packet(self, str(inner_pkt), ACCESS_PORT)
+        verify_no_other_packets(self)
+        
+        #tx on loopback port
+        self.dataplane.send(LOOPBACK_PORT, str(inner_pkt))
+        #verify rx on loopback port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src=TNW1_GW_MAC_STR
+                                      , eth_dst=TNW1_VM2_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=TNW1_VLAN                                      
+                                      , ip_dst =TNW1_VM2_IP_STR
+                                      , ip_src =TNW1_VM1_IP_STR
+                                      , ip_ttl =63)
+        verify_packet(self, str(inner_pkt), LOOPBACK_PORT)
+        verify_no_other_packets(self)
+        #tx on access port
+        self.dataplane.send(ACCESS_PORT, str(inner_pkt))        
+        #verify rx on network port
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src=TNW1_GW_MAC_STR
+                                      , eth_dst=TNW1_VM2_MAC_STR
+                                      , ip_dst =TNW1_VM2_IP_STR
+                                      , ip_src =TNW1_VM1_IP_STR
+                                      , ip_ttl =63)
+        vxlan_pkt = simple_vxlan_packet(eth_src=SWITCH_INTF_MAC_STR
+                                        ,eth_dst=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=TNW1_VNID
+                                        ,ip_dst=VXLAN_TNL_H1_IP_STR
+                                        ,ip_src=SWITCH_IP_STR
+                                        ,inner_payload=inner_pkt)        
+        verify_packet(self, inner_pkt, NETWORK_PORT)
+        verify_no_other_packets(self) 
+
+
+        """
+        Send paket to verify, NW2
+        """        
+        #tx packet on network lport
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src = TNW2_VM1_MAC_STR
+                                      , eth_dst=TNW2_GW_MAC_STR
+                                      , ip_dst =TNW2_VM2_IP_STR 
+                                      , ip_src =TNW2_VM1_IP_STR
+                                      , ip_ttl =64)
+        vxlan_pkt = simple_vxlan_packet(eth_dst=SWITCH_INTF_MAC_STR
+                                        ,eth_src=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=TNW2_VNID
+                                        ,ip_dst= SWITCH_IP_STR
+                                        ,ip_src=VXLAN_TNL_H1_IP_STR
+                                        ,inner_payload=inner_pkt)
+        self.dataplane.send(NETWORK_PORT, str(vxlan_pkt))
+        #verify rx on access port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src= TNW2_VM1_MAC_STR
+                                      , eth_dst=TNW2_GW_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=TNW2_VLAN
+                                      , ip_dst =TNW2_VM2_IP_STR 
+                                      , ip_src =TNW2_VM1_IP_STR
+                                      , ip_ttl =64)
+        verify_packet(self, str(inner_pkt), ACCESS_PORT)
+        verify_no_other_packets(self)
+        
+        #tx on loopback port
+        self.dataplane.send(LOOPBACK_PORT, str(inner_pkt))
+        #verify rx on loopback port
+        inner_pkt = simple_udp_packet(pktlen=104
+                                      , eth_src=TNW2_GW_MAC_STR
+                                      , eth_dst=TNW2_VM2_MAC_STR
+                                      , dl_vlan_enable=True
+                                      , vlan_vid=TNW2_VLAN                                      
+                                      , ip_dst =TNW2_VM2_IP_STR
+                                      , ip_src =TNW2_VM1_IP_STR
+                                      , ip_ttl =63)
+        verify_packet(self, str(inner_pkt), LOOPBACK_PORT)
+        verify_no_other_packets(self)
+        #tx on access port
+        self.dataplane.send(ACCESS_PORT, str(inner_pkt))        
+        #verify rx on network port
+        inner_pkt = simple_udp_packet(pktlen=100
+                                      , eth_src=TNW2_GW_MAC_STR
+                                      , eth_dst=TNW2_VM2_MAC_STR
+                                      , ip_dst =TNW2_VM2_IP_STR
+                                      , ip_src =TNW2_VM1_IP_STR
+                                      , ip_ttl =63)
+        vxlan_pkt = simple_vxlan_packet(eth_src=SWITCH_INTF_MAC_STR
+                                        ,eth_dst=VXLAN_TNL_H_R_MAC_STR
+                                        ,vnid=TNW2_VNID
+                                        ,ip_dst=VXLAN_TNL_H1_IP_STR
+                                        ,ip_src=SWITCH_IP_STR
+                                        ,inner_payload=inner_pkt)        
+        verify_packet(self, inner_pkt, NETWORK_PORT)
+        verify_no_other_packets(self) 
+
+        
+        """clear all flow/group and configuration
+        """
+        delete_all_flows(self.controller)
+        delete_all_groups(self.controller)
+        """ del vxlan config"""
+        #delete access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=TNW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=TNW1_VLAN, vnid=TNW1_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", TNW1_ACCESS_LPORT, ACCESS_PORT, TNW1_VLAN, TNW1_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=TNW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=TNW2_VLAN, vnid=TNW2_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", TNW2_ACCESS_LPORT, ACCESS_PORT, TNW1_VLAN, TNW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #delete network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=TNW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=TNW1_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", TNW1_NEWORK_LPORT, TNW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=TNW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=TNW2_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", TNW2_NEWORK_LPORT, TNW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        #delete next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN, operation="delete")        
+        logging.info("delete config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)                   
+        #del vni
+        vni_config_xml=get_vni_config_xml(vni_id=TNW1_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", TNW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=TNW2_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", TNW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+
+class vrouterNetconfSetUnset(base_tests.SimpleDataPlane):
+    def runTest(self):
+        ACCESS_PORT=config["port_map"].keys()[0]
+        NETWORK_PORT=config["port_map"].keys()[1]
+        LOOPBACK_PORT=config["port_map"].keys()[2]
+        print "access %ld, network %ld, loopback %ld"%(ACCESS_PORT, NETWORK_PORT, LOOPBACK_PORT)        
+        """ add vxlan config"""
+        feature_reply=get_featureReplay(self)	
+        SWITCH_INTF_MAC_STR, SWITCH_INTF_MAC=getSwitchCpuMACFromDPID(feature_reply.datapath_id)
+        #add vni        
+        vni_config_xml=get_vni_config_xml(vni_id=NW1_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=NW2_VNID, mcast_ipv4=None, next_hop_id=None)
+        logging.info("config VNI %lx", NW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        #add access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=NW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW1_VLAN, vnid=NW1_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW1_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_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=NW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW2_VLAN, vnid=NW2_VNID)
+        logging.info("config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW2_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #create next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN)        
+        logging.info("config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)   
+        #create network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=NW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW1_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW1_NEWORK_LPORT, NW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=NW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW2_VNID)												
+        logging.info("config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW2_NEWORK_LPORT, NW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+                
+        """clear all flow/group and configuration
+        """
+        """ del vxlan config"""
+        #delete access port
+        vtap_conf_xml=get_vtap_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                        lport=NW1_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW1_VLAN, vnid=NW1_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW1_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_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=NW2_ACCESS_LPORT, phy_port=ACCESS_PORT, 
+                                        vlan=NW2_VLAN, vnid=NW2_VNID, operation="delete")
+        logging.info("delete config VTAP 0x%lx, PHY %d, VID %d, VNID %lx", NW2_ACCESS_LPORT, ACCESS_PORT, NW1_VLAN, NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vtap_conf_xml) == True)       
+        #delete network port        
+        vtep_conf_xml=get_vtep_lport_config_xml(dp_id=feature_reply.datapath_id, 
+                                                lport=NW1_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW1_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW1_NEWORK_LPORT, NW1_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_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=NW2_NEWORK_LPORT, 
+                                                src_ip=SWITCH_IP_STR, dst_ip=VXLAN_TNL_H1_IP_STR,
+                                                next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+                                                vnid=NW2_VNID, operation="delete")												
+        logging.info("delete config VTEP 0x%lx, VNID=%lu, SRC_IP %s, DST_IP %s, NEXTHOP_ID %d", NW2_NEWORK_LPORT, NW2_VNID, SWITCH_IP, VXLAN_TNL_H1_IP_STR, VXLAN_TNL_H_R_NHP_ID);
+        assert(send_edit_config(config["switch_ip"], vtep_conf_xml) == True)
+        #delete next hop and network port for H1
+        next_hop_conf_xml=get_next_hop_config_xml(next_hop_id=VXLAN_TNL_H_R_NHP_ID, 
+		                                          dst_mac=VXLAN_TNL_H_R_MAC_STR, 
+												  phy_port=NETWORK_PORT, 
+												  vlan=SWITCH_VLAN, operation="delete")        
+        logging.info("delete config NextHop %d, DST_MAC %s, PHY %d, VLAN %d", VXLAN_TNL_H_R_NHP_ID, VXLAN_TNL_H_R_MAC_STR, NETWORK_PORT, SWITCH_VLAN);
+        assert(send_edit_config(config["switch_ip"], next_hop_conf_xml)==True)                   
+        #del vni
+        vni_config_xml=get_vni_config_xml(vni_id=NW1_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", NW1_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
+        vni_config_xml=get_vni_config_xml(vni_id=NW2_VNID, mcast_ipv4=None, next_hop_id=None, operation="delete")
+        logging.info("delete config VNI %lx", NW2_VNID);
+        assert(send_edit_config(config["switch_ip"], vni_config_xml) == True)
