diff --git a/ipacm/inc/IPACM_Filtering.h b/ipacm/inc/IPACM_Filtering.h
index 48a3d66..7554ba9 100644
--- a/ipacm/inc/IPACM_Filtering.h
+++ b/ipacm/inc/IPACM_Filtering.h
@@ -69,7 +69,6 @@
 private:
 	static const char *DEVICE_NAME;
 	int fd; /* File descriptor of the IPA device node /dev/ipa */
-	int fd_wwan_ioctl;
 };
 
 #endif //IPACM_FILTERING_H
diff --git a/ipacm/inc/IPACM_Lan.h b/ipacm/inc/IPACM_Lan.h
index 92475cb..1f561fa 100644
--- a/ipacm/inc/IPACM_Lan.h
+++ b/ipacm/inc/IPACM_Lan.h
@@ -324,7 +324,11 @@
 	/*handle lan iface down event*/
 	int handle_down_evt();
 
-	void post_lan2lan_client_disconnect_msg();
+	/*handle lan2lan internal mesg posting*/
+	int post_lan2lan_client_disconnect_msg(ipa_ip_type iptype);
+
+	/*handle reset usb-client rt-rules */
+	int handle_lan_client_reset_rt(ipa_ip_type iptype);
 };
 
 #endif /* IPACM_LAN_H */
diff --git a/ipacm/inc/IPACM_Log.h b/ipacm/inc/IPACM_Log.h
index d468f96..8a05761 100644
--- a/ipacm/inc/IPACM_Log.h
+++ b/ipacm/inc/IPACM_Log.h
@@ -61,18 +61,18 @@
 
 static char buffer_send[MAX_BUF_LEN];
 
-#define PERROR(fmt)   memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+#define PERROR(fmt)   memset(buffer_send, 0, MAX_BUF_LEN);\
 					  snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s()", __FILE__, __LINE__, __FUNCTION__);\
 					  ipacm_log_send (buffer_send); \
                       perror(fmt);
 
-#define IPACMERR(fmt, ...)	memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+#define IPACMERR(fmt, ...)	memset(buffer_send, 0, MAX_BUF_LEN);\
 							snprintf(buffer_send,MAX_BUF_LEN,"ERR: %s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
 							ipacm_log_send (buffer_send);
-#define IPACMDBG(fmt, ...)	memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+#define IPACMDBG(fmt, ...)	memset(buffer_send, 0, MAX_BUF_LEN);\
 							snprintf(buffer_send,MAX_BUF_LEN,"%s:%d %s() " fmt, __FILE__,  __LINE__, __FUNCTION__, ##__VA_ARGS__);\
 							ipacm_log_send (buffer_send);
-#define IPACMLOG(fmt, ...)      memset(buffer_send, 0, sizeof(MAX_BUF_LEN));\
+#define IPACMLOG(fmt, ...)      memset(buffer_send, 0, MAX_BUF_LEN);\
                                                         snprintf(buffer_send,MAX_BUF_LEN, fmt, ##__VA_ARGS__);\
                                                         ipacm_log_send (buffer_send);
 
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index c677d79..b60bb26 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -49,7 +49,7 @@
 #include <IPACM_Defs.h>
 #include <IPACM_Xml.h>
 
-#define IPA_NUM_DEFAULT_WAN_FILTER_RULES 2
+#define IPA_NUM_DEFAULT_WAN_FILTER_RULES 3 /*1 for v4, 2 for v6*/
 #define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV4 2
 #define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV6 3
 
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index 631713a..1142772 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -214,7 +214,7 @@
 	int handle_wlan_client_init_ex(ipacm_event_data_wlan_ex *data);
 
 	/*handle lan2lan internal mesg posting*/
-	int handle_lan2lan_msg_post(uint8_t *mac_addr, ipa_cm_event_id event);
+	int handle_lan2lan_msg_post(uint8_t *mac_addr, ipa_cm_event_id event, ipa_ip_type iptype);
 
 	/*handle wifi client */
 	int handle_wlan_client_ipaddr(ipacm_event_data_all *data);
@@ -253,7 +253,11 @@
 	/* install UL filter rule from Q6 */
 	virtual int handle_uplink_filter_rule(ipacm_ext_prop* prop, ipa_ip_type iptype);
 
+	/* install TCP control filter rules */
 	virtual void install_tcp_ctl_flt_rule(ipa_ip_type iptype);
+
+	/*handle reset wifi-client rt-rules */
+	int handle_wlan_client_reset_rt(ipa_ip_type iptype);
 };
 
 
diff --git a/ipacm/src/Android.mk b/ipacm/src/Android.mk
new file mode 100644
index 0000000..5d06031
--- /dev/null
+++ b/ipacm/src/Android.mk
@@ -0,0 +1,80 @@
+ifneq (,$(filter $(QCOM_BOARD_PLATFORMS),$(TARGET_BOARD_PLATFORM)))
+ifneq (, $(filter aarch64 arm arm64, $(TARGET_ARCH)))
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/../src
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../inc
+LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../ipanat/inc
+LOCAL_C_INCLUDES += external/icu4c/common
+LOCAL_C_INCLUDES += external/dhcpcd
+LOCAL_C_INCLUDES += bionic/libstdc++/include
+LOCAL_C_INCLUDES += external/libxml2/include
+LOCAL_C_INCLUDES += external/libnetfilter_conntrack/include
+LOCAL_C_INCLUDES += external/libnfnetlink/include
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+
+LOCAL_CFLAGS := -v
+LOCAL_CFLAGS += -DFEATURE_IPA_ANDROID
+LOCAL_CFLAGS += -DDEBUG
+
+ifeq ($(TARGET_ARCH),arm)
+LOCAL_CFLAGS += -include bionic/libc/kernel/arch-arm/asm/posix_types.h
+LOCAL_CFLAGS += -include bionic/libc/kernel/arch-arm/asm/byteorder.h
+endif
+
+LOCAL_SRC_FILES := IPACM_Main.cpp \
+		IPACM_EvtDispatcher.cpp \
+		IPACM_Config.cpp \
+		IPACM_CmdQueue.cpp \
+		IPACM_Filtering.cpp \
+		IPACM_Routing.cpp \
+		IPACM_Header.cpp \
+		IPACM_Lan.cpp \
+		IPACM_Iface.cpp \
+		IPACM_Wlan.cpp \
+		IPACM_Wan.cpp \
+		IPACM_IfaceManager.cpp \
+		IPACM_Neighbor.cpp \
+		IPACM_Netlink.cpp \
+		IPACM_Xml.cpp \
+		IPACM_Conntrack_NATApp.cpp\
+		IPACM_ConntrackClient.cpp \
+		IPACM_ConntrackListener.cpp \
+                IPACM_Log.cpp
+
+LOCAL_MODULE := ipacm
+LOCAL_MODULE_TAGS := debug
+
+LOCAL_SHARED_LIBRARIES := libipanat
+LOCAL_SHARED_LIBRARIES += libxml2
+LOCAL_SHARED_LIBRARIES += libnfnetlink
+LOCAL_SHARED_LIBRARIES += libnetfilter_conntrack
+LOCAL_SHARED_LIBRARIES += libicuuc
+LOCAL_SHARED_LIBRARIES += libdhcpcd
+include $(BUILD_EXECUTABLE)
+
+################################################################################
+
+define ADD_TEST
+
+include $(CLEAR_VARS)
+LOCAL_MODULE       := $1
+LOCAL_SRC_FILES    := $1
+LOCAL_MODULE_CLASS := ipacm
+LOCAL_MODULE_TAGS  := debug
+LOCAL_MODULE_PATH  := $(TARGET_OUT_ETC)
+include $(BUILD_PREBUILT)
+
+endef
+
+IPACM_FILE_LIST := IPACM_cfg.xml
+$(foreach TEST,$(IPACM_FILE_LIST),$(eval $(call ADD_TEST,$(TEST))))
+
+endif # $(TARGET_ARCH)
+endif
diff --git a/ipacm/src/IPACM_Filtering.cpp b/ipacm/src/IPACM_Filtering.cpp
index fac26a2..4882ebb 100644
--- a/ipacm/src/IPACM_Filtering.cpp
+++ b/ipacm/src/IPACM_Filtering.cpp
@@ -57,18 +57,11 @@
 	{
 		IPACMERR("Failed opening %s.\n", DEVICE_NAME);
 	}
-
-	fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
-	if(fd_wwan_ioctl < 0)
-	{
-		IPACMERR("Failed to open %s.\n",WWAN_QMI_IOCTL_DEVICE_NAME);
-	}
 }
 
 IPACM_Filtering::~IPACM_Filtering()
 {
 	close(fd);
-	close(fd_wwan_ioctl);
 }
 
 bool IPACM_Filtering::DeviceNodeIsOpened()
@@ -238,16 +231,12 @@
 	int ret = 0, cnt, num_rules = 0, pos = 0;
 	ipa_install_fltr_rule_req_msg_v01 qmi_rule_msg;
 
+	int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
 	if(fd_wwan_ioctl < 0)
 	{
-		IPACMERR("WWAN ioctl is not open.\n");
+		IPACMERR("Failed to open %s.\n",WWAN_QMI_IOCTL_DEVICE_NAME);
 		return false;
 	}
-	else
-	{
-		IPACMDBG("WWAN ioctl is open.\n");
-	}
-   
 
 	if(rule_table_v4 != NULL)
 	{
@@ -263,6 +252,7 @@
 	if(num_rules > QMI_IPA_MAX_FILTERS_V01)
 	{
 		IPACMERR("The number of filtering rules exceed limit.\n");
+		close(fd_wwan_ioctl);
 		return false;
 	}
 	else
@@ -329,20 +319,22 @@
 		if (ret != 0)
 		{
 			IPACMERR("Failed adding Filtering rule %p with ret %d\n ", &qmi_rule_msg, ret);
+			close(fd_wwan_ioctl);
 			return false;
 		}
 	}
 	IPACMDBG("Added Filtering rule %p\n", &qmi_rule_msg);
+	close(fd_wwan_ioctl);
 	return true;
 }
 
 bool IPACM_Filtering::SendFilteringRuleIndex(struct ipa_fltr_installed_notif_req_msg_v01* table)
 {
 	int ret = 0;
-
+	int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
 	if(fd_wwan_ioctl < 0)
 	{
-		IPACMERR("WWAN ioctl is not open.\n");
+		IPACMERR("Failed to open %s.\n",WWAN_QMI_IOCTL_DEVICE_NAME);
 		return false;
 	}
 
@@ -350,10 +342,12 @@
 	if (ret != 0)
 	{
 		IPACMERR("Failed adding filtering rule index %p with ret %d\n", table, ret);
+		close(fd_wwan_ioctl);
 		return false;
 	}
 
 	IPACMDBG("Added Filtering rule index %p\n", table);
+	close(fd_wwan_ioctl);
 	return true;
 }
 
diff --git a/ipacm/src/IPACM_Iface.cpp b/ipacm/src/IPACM_Iface.cpp
index 6fb2e5c..293c311 100644
--- a/ipacm/src/IPACM_Iface.cpp
+++ b/ipacm/src/IPACM_Iface.cpp
@@ -511,6 +511,7 @@
 	if(iface_query == NULL)
 	{
 		IPACMERR("Unable to allocate iface_query memory.\n");
+		close(fd);
 		return IPACM_FAILURE;
 	}
 	IPACMDBG("iface name %s\n", dev_name);
@@ -531,6 +532,7 @@
 		if(tx_prop == NULL)
 		{
 			IPACMERR("Unable to allocate tx_prop memory.\n");
+			close(fd);
 			return IPACM_FAILURE;
 		}
 	memcpy(tx_prop->name, dev_name, sizeof(tx_prop->name));
@@ -562,6 +564,7 @@
 		if(rx_prop == NULL)
 		{
 			IPACMERR("Unable to allocate rx_prop memory.\n");
+			close(fd);
 			return IPACM_FAILURE;
 		}
 	memcpy(rx_prop->name, dev_name,
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index fa6d101..1f967ea 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -42,7 +42,6 @@
 #include <string.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
-#include <assert.h>
 #include "IPACM_Netlink.h"
 #include "IPACM_Lan.h"
 #include "IPACM_Wan.h"
@@ -247,35 +246,35 @@
 
 					if (IPACM_Wan::isWanUP())
 					{
+						if(data->iptype == IPA_IP_v4 || data->iptype == IPA_IP_MAX)
+						{
 						if(IPACM_Wan::backhaul_is_sta_mode == false)
 						{
-							if(data->iptype == IPA_IP_v4 || data->iptype == IPA_IP_MAX)
-							{
 								ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 								handle_wan_up_ex(ext_prop, IPA_IP_v4);
 							}
-						}
 						else
 						{
 							handle_wan_up(IPA_IP_v4);
 						}
 					}
+					}
 
 					if(IPACM_Wan::isWanUP_V6())
 					{
+						if((data->iptype == IPA_IP_v6 || data->iptype == IPA_IP_MAX) && num_dft_rt_v6 == 1)
+						{
 						if(IPACM_Wan::backhaul_is_sta_mode == false)
 						{
-							if(data->iptype == IPA_IP_v6 || data->iptype == IPA_IP_MAX)
-							{
 								ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v6);
 								handle_wan_up_ex(ext_prop, IPA_IP_v6);
 							}
-						}
 						else
 						{
 							handle_wan_up(IPA_IP_v6);
 						}
 					}
+					}
 
 					/* Post event to NAT */
 					if (data->iptype == IPA_IP_v4)
@@ -320,18 +319,18 @@
 			return;
 		}
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
+		if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
+		{
 		if(data_wan->is_sta == false)
 		{
-			if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
-			{
 				ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 				handle_wan_up_ex(ext_prop, IPA_IP_v4);
 			}
-		}
 		else
 		{
 			handle_wan_up(IPA_IP_v4);
 		}
+		}
 		break;
 
 	case IPA_HANDLE_WAN_UP_V6:
@@ -344,18 +343,18 @@
 			return;
 		}
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
+		if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
+		{
 		if(data_wan->is_sta == false)
 		{
-			if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
-			{
 				ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v6);
 				handle_wan_up_ex(ext_prop, IPA_IP_v6);
 			}
-		}
 		else
 		{
 			handle_wan_up(IPA_IP_v6);
 		}
+		}
 		break;
 
 	case IPA_HANDLE_WAN_DOWN:
@@ -378,6 +377,11 @@
 			IPACMERR("No event data is found.\n");
 			return;
 		}
+		/* clean up v6 RT rules*/
+		IPACMDBG("Received IPA_WAN_V6_DOWN in LAN-instance and need clean up client IPv6 address \n");
+		/* reset usb-client ipv6 rt-rules */
+		handle_lan_client_reset_rt(IPA_IP_v6);
+
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
 		handle_wan_down_v6(data_wan->is_sta);
 		break;
@@ -1208,17 +1212,20 @@
 
 			}
 		}
+		/* initialize wifi client*/
+		get_client_memptr(eth_client, num_eth_client)->route_rule_set_v4 = false;
+		get_client_memptr(eth_client, num_eth_client)->route_rule_set_v6 = 0;
+		get_client_memptr(eth_client, num_eth_client)->ipv4_set = false;
+		get_client_memptr(eth_client, num_eth_client)->ipv6_set = 0;
+		num_eth_client++;
+		header_name_count++; //keep increasing header_name_count
+		res = IPACM_SUCCESS;
+		IPACMDBG("eth client number: %d\n", num_eth_client);
 	}
-	/* initialize wifi client*/
-	get_client_memptr(eth_client, num_eth_client)->route_rule_set_v4 = false;
-    get_client_memptr(eth_client, num_eth_client)->route_rule_set_v6 = 0;
-	get_client_memptr(eth_client, num_eth_client)->ipv4_set = false;
-    get_client_memptr(eth_client, num_eth_client)->ipv6_set = 0;
-	num_eth_client++;
-	header_name_count++; //keep increasing header_name_count
-	res = IPACM_SUCCESS;
-	IPACMDBG("eth client number: %d\n", num_eth_client);
-
+	else
+	{
+		return res;
+	}
 fail:
 	free(pHeaderDescriptor);
 
@@ -1831,7 +1838,8 @@
 	}
 
 	/* posting ip to lan2lan module to delete RT/FILTER rules*/
-	post_lan2lan_client_disconnect_msg();
+	post_lan2lan_client_disconnect_msg(IPA_IP_v4);
+	post_lan2lan_client_disconnect_msg(IPA_IP_v6);
 
 /* Delete private subnet*/
 #ifdef FEATURE_IPA_ANDROID
@@ -2494,7 +2502,6 @@
 		{
 			if(lan2lan_flt_rule_hdl_v4[i].rule_hdl == rule_hdl)
 			{
-				assert(lan2lan_flt_rule_hdl_v4[i].valid == true);
 				if(reset_to_dummy_flt_rule(IPA_IP_v4, rule_hdl) == IPACM_FAILURE)
 				{
 					IPACMERR("Failed to delete lan2lan v4 flt rule %d\n", rule_hdl);
@@ -2519,7 +2526,6 @@
 		{
 			if(lan2lan_flt_rule_hdl_v6[i].rule_hdl == rule_hdl)
 			{
-				assert(lan2lan_flt_rule_hdl_v6[i].valid == true);
 				if(reset_to_dummy_flt_rule(IPA_IP_v6, rule_hdl) == IPACM_FAILURE)
 				{
 					IPACMERR("Failed to delete lan2lan v6 flt rule %d\n", rule_hdl);
@@ -3115,7 +3121,47 @@
 	IPACM_EvtDispatcher::PostEvt(&evt);
 }
 
-void IPACM_Lan::post_lan2lan_client_disconnect_msg()
+/*handle reset usb-client rt-rules */
+int IPACM_Lan::handle_lan_client_reset_rt(ipa_ip_type iptype)
+{
+	int i, res = IPACM_SUCCESS;
+
+	/* clean eth-client routing rules */
+	IPACMDBG("left %d eth clients need to be deleted \n ", num_eth_client);
+	for (i = 0; i < num_eth_client; i++)
+	{
+		res = delete_eth_rtrules(i, iptype);
+		if (res != IPACM_SUCCESS)
+		{
+			IPACMERR("Failed to delete old iptype(%d) rules.\n", iptype);
+			return res;
+		}
+	} /* end of for loop */
+
+	/* Pass info to LAN2LAN module */
+	res = post_lan2lan_client_disconnect_msg(iptype);
+	if (res != IPACM_SUCCESS)
+	{
+		IPACMERR("Failed to posting delete old iptype(%d) address.\n", iptype);
+		return res;
+	}
+	/* Reset ip-address */
+	for (i = 0; i < num_eth_client; i++)
+	{
+		if(iptype == IPA_IP_v4)
+		{
+			get_client_memptr(eth_client, i)->ipv4_set = false;
+		}
+		else
+		{
+			get_client_memptr(eth_client, i)->ipv6_set = 0;
+		}
+	} /* end of for loop */
+	return res;
+}
+
+/*handle lan2lan internal mesg posting*/
+int IPACM_Lan::post_lan2lan_client_disconnect_msg(ipa_ip_type iptype)
 {
 	int i, j;
 	ipacm_cmd_q_data evt_data;
@@ -3123,13 +3169,14 @@
 
 	for (i = 0; i < num_eth_client; i++)
 	{
-			if(get_client_memptr(eth_client, i)->ipv4_set == true)
+			if((get_client_memptr(eth_client, i)->ipv4_set == true)
+				&& (iptype == IPA_IP_v4))
 			{
 				lan_client = (ipacm_event_lan_client*)malloc(sizeof(ipacm_event_lan_client));
 				if(lan_client == NULL)
 				{
 					IPACMERR("Failed to allocate memory.\n");
-					return;
+					return IPACM_FAILURE;
 				}
 				memset(lan_client, 0, sizeof(ipacm_event_lan_client));
 				lan_client->iptype = IPA_IP_v4;
@@ -3144,31 +3191,35 @@
 				IPACM_EvtDispatcher::PostEvt(&evt_data);
 			}
 
-			for (j = 0; j < get_client_memptr(eth_client, i)->ipv6_set; j++)
+			if((get_client_memptr(eth_client, i)->ipv6_set > 0)
+				&& (iptype == IPA_IP_v6))
 			{
-				lan_client = (ipacm_event_lan_client*)malloc(sizeof(ipacm_event_lan_client));
-				if(lan_client == NULL)
+				for (j = 0; j < get_client_memptr(eth_client, i)->ipv6_set; j++)
 				{
-					IPACMERR("Failed to allocate memory.\n");
-					return;
+					lan_client = (ipacm_event_lan_client*)malloc(sizeof(ipacm_event_lan_client));
+					if(lan_client == NULL)
+					{
+						IPACMERR("Failed to allocate memory.\n");
+						return IPACM_FAILURE;
+					}
+					memset(lan_client, 0, sizeof(ipacm_event_lan_client));
+					lan_client->iptype = IPA_IP_v6;
+					lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
+					lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
+					lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
+					lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
+					lan_client->p_iface = this;
+
+					memset(&evt_data, 0, sizeof(ipacm_cmd_q_data));
+					evt_data.evt_data = (void*)lan_client;
+					evt_data.event = IPA_LAN_CLIENT_DISCONNECT;
+
+					IPACMDBG("Posting event IPA_LAN_CLIENT_DISCONNECT\n");
+					IPACM_EvtDispatcher::PostEvt(&evt_data);
 				}
-				memset(lan_client, 0, sizeof(ipacm_event_lan_client));
-				lan_client->iptype = IPA_IP_v6;
-				lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
-				lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
-				lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
-				lan_client->ipv6_addr[0] = get_client_memptr(eth_client, i)->v6_addr[j][0];
-				lan_client->p_iface = this;
-
-				memset(&evt_data, 0, sizeof(ipacm_cmd_q_data));
-				evt_data.evt_data = (void*)lan_client;
-				evt_data.event = IPA_LAN_CLIENT_DISCONNECT;
-
-				IPACMDBG("Posting event IPA_LAN_CLIENT_DISCONNECT\n");
-				IPACM_EvtDispatcher::PostEvt(&evt_data);
 			}
 	} /* end of for loop */
-	return;
+	return IPACM_SUCCESS;
 }
 
 void IPACM_Lan::install_tcp_ctl_flt_rule(ipa_ip_type iptype)
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 8871303..d474d73 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -199,7 +199,7 @@
 		if(event == NULL)
 		{
 			IPACMERR("Failed to allocate memory.\n");
-			return;
+			return NULL;
 		}
 		memset(event, 0, length);
 		memcpy(event, buffer, length);
diff --git a/ipacm/src/IPACM_Netlink.cpp b/ipacm/src/IPACM_Netlink.cpp
index d579952..9c616af 100644
--- a/ipacm/src/IPACM_Netlink.cpp
+++ b/ipacm/src/IPACM_Netlink.cpp
@@ -210,6 +210,11 @@
 
 	while(true)
 	{
+	    for(i = 0; i < sk_fd_set->num_fd; i++ )
+		{
+			FD_SET(sk_fd_set->sk_fds[i].sk_fd, &(sk_fd_set->fdset));
+		}
+
 		if((ret = select(sk_fd_set->max_fd + 1, &(sk_fd_set->fdset), NULL, NULL, NULL)) < 0)
 		{
 			IPACMERR("ipa_nl select failed\n");
@@ -230,6 +235,7 @@
 											 i,
 											 sk_fd_set->sk_fds[i].sk_fd);
 						}
+						FD_CLR(sk_fd_set->sk_fds[i].sk_fd, &(sk_fd_set->fdset));
 					}
 					else
 					{
@@ -1595,6 +1601,7 @@
 	if(ipa_nl_addfd_map(sk_fdset, sk_info.sk_fd, read_f) != IPACM_SUCCESS)
 	{
 		IPACMERR("cannot add nl routing sock for reading\n");
+		close(sk_info.sk_fd);
 		return IPACM_FAILURE;
 	}
 
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 3ec5fab..2c02e31 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -416,6 +416,43 @@
 				  	handle_route_add_evt(data->iptype);
 				}
 			}
+			else /* double check if current default iface is not itself */
+			{
+				if ((data->iptype == IPA_IP_v4) && (!data->ipv4_addr) && (!data->ipv4_addr_mask) && (active_v4 == true))
+				{
+					IPACMDBG("Received v4 IPA_ROUTE_ADD_EVENT for other iface (%s)\n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+					IPACMDBG("ipv4 addr 0x%x\n", data->ipv4_addr);
+					IPACMDBG("ipv4 addr mask 0x%x\n", data->ipv4_addr_mask);
+					IPACMDBG("need clean default v4 route (dst:0.0.0.0) for old iface (%s)\n", dev_name);
+					if(m_is_sta_mode == Q6_WAN)
+					{
+						del_wan_firewall_rule(IPA_IP_v4);
+						install_wan_filtering_rule();
+						handle_route_del_evt_ex(IPA_IP_v4);
+					}
+					else
+					{
+						del_dft_firewall_rules(IPA_IP_v4);
+						handle_route_del_evt(IPA_IP_v4);
+					}
+				}
+				else if ((data->iptype == IPA_IP_v6) && (!data->ipv6_addr[0]) && (!data->ipv6_addr[1]) && (!data->ipv6_addr[2]) && (!data->ipv6_addr[3]) && (active_v6 == true))
+				{
+				    IPACMDBG("Received v6 IPA_ROUTE_ADD_EVENT for other iface (%s)\n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
+					IPACMDBG("need clean default v6 route for old iface (%s)\n", dev_name);
+					if(m_is_sta_mode == Q6_WAN)
+					{
+						del_wan_firewall_rule(IPA_IP_v6);
+						install_wan_filtering_rule();
+						handle_route_del_evt_ex(IPA_IP_v6);
+					}
+					else
+					{
+						del_dft_firewall_rules(IPA_IP_v6);
+						handle_route_del_evt(IPA_IP_v6);
+					}
+				}
+			}
 		}
 		break;
 
@@ -589,6 +626,11 @@
 			return IPACM_SUCCESS;
 		}
 	}
+	else
+	{
+		IPACM_Wan::backhaul_is_sta_mode	= false;
+		IPACMDBG("reset backhaul to LTE \n");
+	}
 
     for (cnt=0; cnt<tx_prop->num_tx_props; cnt++)
 	{
@@ -1414,6 +1456,37 @@
 			m_pFilteringTable->ip = IPA_IP_v6;
 			m_pFilteringTable->num_rules = (uint8_t)1;
 
+			/* Construct ICMP rule */
+			memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
+			flt_rule_entry.at_rear = true;
+			flt_rule_entry.flt_rule_hdl = -1;
+			flt_rule_entry.status = -1;
+			flt_rule_entry.rule.retain_hdr = 1;
+			flt_rule_entry.rule.eq_attrib_type = 0;
+			flt_rule_entry.rule.action = IPA_PASS_TO_EXCEPTION;
+			memcpy(&flt_rule_entry.rule.attrib,
+					 &rx_prop->rx[0].attrib,
+					 sizeof(struct ipa_rule_attrib));
+			flt_rule_entry.rule.attrib.attrib_mask |= IPA_FLT_NEXT_HDR;
+			flt_rule_entry.rule.attrib.u.v6.next_hdr = (uint8_t)IPACM_FIREWALL_IPPROTO_ICMP6;
+			memcpy(&(m_pFilteringTable->rules[0]), &flt_rule_entry, sizeof(struct ipa_flt_rule_add));
+
+			if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
+			{
+				IPACMERR("Error Adding Filtering rules, aborting...\n");
+				free(m_pFilteringTable);
+				return IPACM_FAILURE;
+			}
+			else
+			{
+				IPACMDBG("flt rule hdl0=0x%x, status=0x%x\n", m_pFilteringTable->rules[0].flt_rule_hdl, m_pFilteringTable->rules[0].status);
+			}
+			/* copy filter hdls */
+			dft_wan_fl_hdl[2] = m_pFilteringTable->rules[0].flt_rule_hdl;
+
+			/* End of construct ICMP rule */
+
+			/* v6 default route */
 			memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
 			if (false == m_routing.GetRoutingTable(&IPACM_Iface::ipacmcfg->rt_tbl_wan_v6)) //rt_tbl_wan_v6 rt_tbl_v6
 			{
@@ -1596,6 +1669,35 @@
 			} /* end of firewall ipv6 filter rule add for loop*/
             }
 
+			/* Construct ICMP rule */
+			memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
+			flt_rule_entry.at_rear = true;
+			flt_rule_entry.flt_rule_hdl = -1;
+			flt_rule_entry.status = -1;
+			flt_rule_entry.rule.retain_hdr = 1;
+			flt_rule_entry.rule.eq_attrib_type = 0;
+			flt_rule_entry.rule.action = IPA_PASS_TO_EXCEPTION;
+			memcpy(&flt_rule_entry.rule.attrib,
+					 &rx_prop->rx[0].attrib,
+					 sizeof(struct ipa_rule_attrib));
+			flt_rule_entry.rule.attrib.attrib_mask |= IPA_FLT_NEXT_HDR;
+			flt_rule_entry.rule.attrib.u.v6.next_hdr = (uint8_t)IPACM_FIREWALL_IPPROTO_ICMP6;
+			memcpy(&(m_pFilteringTable->rules[0]), &flt_rule_entry, sizeof(struct ipa_flt_rule_add));
+
+			if (false == m_filtering.AddFilteringRule(m_pFilteringTable))
+			{
+				IPACMERR("Error Adding Filtering rules, aborting...\n");
+				free(m_pFilteringTable);
+				return IPACM_FAILURE;
+			}
+			else
+			{
+				IPACMDBG("flt rule hdl0=0x%x, status=0x%x\n", m_pFilteringTable->rules[0].flt_rule_hdl, m_pFilteringTable->rules[0].status);
+			}
+			/* copy filter hdls */
+			dft_wan_fl_hdl[2] = m_pFilteringTable->rules[0].flt_rule_hdl;
+			/* End of construct ICMP rule */
+
 			/* setup default wan filter rule */
 			memset(&flt_rule_entry, 0, sizeof(struct ipa_flt_rule_add));
 
@@ -2420,6 +2522,7 @@
 			IPACMERR("ioctl IPA_IOC_QUERY_INTF_EXT_PROPS failed\n");
 			/* ext_prop memory will free when iface-down*/
 			free(ext_prop);
+			close(fd);
 			return ret;
 		}
 
@@ -2438,6 +2541,7 @@
 			IPACM_Wan::is_ext_prop_set = true;
 		}
 		free(ext_prop);
+		close(fd);
 	}
 	return IPACM_SUCCESS;
 }
@@ -2808,6 +2912,12 @@
 			IPACMERR("Error Deleting Filtering rules, aborting...\n");
 			return IPACM_FAILURE;
 		}
+		if (m_filtering.DeleteFilteringHdls(&dft_wan_fl_hdl[2],
+																				IPA_IP_v6, 1) == false)
+		{
+			IPACMERR("Error Deleting Filtering rules, aborting...\n");
+			return IPACM_FAILURE;
+		}
 		num_firewall_v6 = 0;
 	}
 
@@ -2902,7 +3012,12 @@
 			evt_data.event = IPA_HANDLE_WAN_DOWN;
 			evt_data.evt_data = (void *)wandown_data;
 			/* Insert IPA_HANDLE_WAN_DOWN to command queue */
-			IPACMDBG("posting IPA_HANDLE_WAN_DOWN for IPv4 \n");
+			IPACMDBG("posting IPA_HANDLE_WAN_DOWN for IPv4 (%d.%d.%d.%d) \n",
+					(unsigned char)(wandown_data->ipv4_addr),
+					(unsigned char)(wandown_data->ipv4_addr >> 8),
+					(unsigned char)(wandown_data->ipv4_addr >> 16),
+					(unsigned char)(wandown_data->ipv4_addr >> 24));
+
 			IPACM_EvtDispatcher::PostEvt(&evt_data);
 			IPACMDBG("setup wan_up/active_v4= false \n");
 			IPACM_Wan::wan_up = false;
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 2b68bc7..397b67f 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -250,35 +250,35 @@
 
 					if (IPACM_Wan::isWanUP())
 					{
+						if(data->iptype == IPA_IP_v4 || data->iptype == IPA_IP_MAX)
+						{
 						if(IPACM_Wan::backhaul_is_sta_mode == false)
 						{
-							if(data->iptype == IPA_IP_v4 || data->iptype == IPA_IP_MAX)
-							{
 								ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 								IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v4);
 							}
-						}
 						else
 						{
 							IPACM_Lan::handle_wan_up(IPA_IP_v4);
 						}
 					}
+					}
 
 					if(IPACM_Wan::isWanUP_V6())
 					{
+						if((data->iptype == IPA_IP_v6 || data->iptype == IPA_IP_MAX) && num_dft_rt_v6 == 1)
+						{
 						if(IPACM_Wan::backhaul_is_sta_mode == false)
 						{
-							if(data->iptype == IPA_IP_v6 || data->iptype == IPA_IP_MAX)
-							{
 								ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v6);
 								IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v6);
 							}
-						}
 						else
 						{
 							IPACM_Lan::handle_wan_up(IPA_IP_v6);
 						}
 					}
+					}
 
 					IPACMDBG("posting IPA_HANDLE_WLAN_UP:Finished checking wan_up\n");
 				}
@@ -297,19 +297,19 @@
 			return;
 		}
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
+		if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
+		{
 		if(data_wan->is_sta == false)
 		{
-			if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
-			{
 				ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 				IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v4);
 			}
-		}
 		else
 		{
 			IPACM_Lan::handle_wan_up(IPA_IP_v4);
 		}
 	}
+	}
 		break;
 
 	case IPA_HANDLE_WAN_UP_V6:
@@ -322,18 +322,18 @@
 			return;
 		}
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
+		if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
+		{
 		if(data_wan->is_sta == false)
 		{
-			if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
-			{
 				ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v6);
 				IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v6);
 			}
-		}
 		else
 		{
 			IPACM_Lan::handle_wan_up(IPA_IP_v6);
 		}
+		}
 		break;
 
 	case IPA_HANDLE_WAN_DOWN:
@@ -364,6 +364,11 @@
 			IPACMERR("No event data is found.\n");
 			return;
 		}
+		/* clean up v6 RT rules*/
+		IPACMDBG("Received IPA_WAN_V6_DOWN in WLAN-instance and need clean up client IPv6 address \n");
+		/* reset wifi-client ipv6 rt-rules */
+		handle_wlan_client_reset_rt(IPA_IP_v6);
+
 		IPACMDBG("Backhaul is sta mode?%d\n", data_wan->is_sta);
 		if(data_wan->is_sta == false && wlan_ap_index > 0)
 		{
@@ -396,7 +401,8 @@
 			{
 				IPACMDBG("Received IPA_WLAN_CLIENT_DEL_EVENT\n");
 				/* support lan2lan ipa-HW feature*/
-				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_DISCONNECT);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_DISCONNECT, IPA_IP_v4);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_DISCONNECT, IPA_IP_v6);
 				handle_wlan_client_down_evt(data->mac_addr);
 			}
 		}
@@ -410,7 +416,8 @@
 			{
 				IPACMDBG("Received IPA_WLAN_CLIENT_POWER_SAVE_EVENT\n");
 				/* support lan2lan ipa-HW feature*/
-				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_SAVE);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_SAVE, IPA_IP_v4);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_SAVE, IPA_IP_v6);
 				handle_wlan_client_pwrsave(data->mac_addr);
 			}
 		}
@@ -424,7 +431,8 @@
 			{
 				IPACMDBG("Received IPA_WLAN_CLIENT_RECOVER_EVENT\n");
 				/* support lan2lan ipa-HW feature*/
-				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_RECOVER);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_RECOVER, IPA_IP_v4);
+				handle_lan2lan_msg_post(data->mac_addr, IPA_LAN_CLIENT_POWER_RECOVER, IPA_IP_v6);
 
 				wlan_index = get_wlan_client_index(data->mac_addr);
 				if ((wlan_index != IPACM_INVALID_INDEX) &&
@@ -895,6 +903,10 @@
 			private_fl_rule_hdl[i] = pFilteringTable->rules[i].rule_hdl;
 		}
 	}
+	else
+	{
+		return IPACM_SUCCESS;
+	}
 fail:
 	free(pFilteringTable);
 	return res;
@@ -955,6 +967,7 @@
 	if (pFilteringTable == NULL)
 	{
 		IPACMERR("Error Locate ipa_flt_rule_add memory...\n");
+		close(fd);
 		return IPACM_FAILURE;
 	}
 	memset(pFilteringTable, 0, len);
@@ -1312,23 +1325,26 @@
 				break;
 			}
 		}
-	}
 
-	/* initialize wifi client*/
-	get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v4 = false;
-    get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v6 = 0;
-	get_client_memptr(wlan_client, num_wifi_client)->ipv4_set = false;
-    get_client_memptr(wlan_client, num_wifi_client)->ipv6_set = 0;
-    get_client_memptr(wlan_client, num_wifi_client)->power_save_set=false;
-	num_wifi_client++;
-	header_name_count++; //keep increasing header_name_count
-	IPACM_Wlan::total_num_wifi_clients++;
-	res = IPACM_SUCCESS;
-	IPACMDBG("Wifi client number: %d\n", num_wifi_client);
+		/* initialize wifi client*/
+		get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v4 = false;
+		get_client_memptr(wlan_client, num_wifi_client)->route_rule_set_v6 = 0;
+		get_client_memptr(wlan_client, num_wifi_client)->ipv4_set = false;
+		get_client_memptr(wlan_client, num_wifi_client)->ipv6_set = 0;
+		get_client_memptr(wlan_client, num_wifi_client)->power_save_set=false;
+		num_wifi_client++;
+		header_name_count++; //keep increasing header_name_count
+		IPACM_Wlan::total_num_wifi_clients++;
+		res = IPACM_SUCCESS;
+		IPACMDBG("Wifi client number: %d\n", num_wifi_client);
+	}
+	else
+	{
+		return res;
+	}
 
 fail:
 	free(pHeaderDescriptor);
-
 	return res;
 }
 
@@ -1971,7 +1987,8 @@
 
 		IPACMDBG("Delete %d client header\n", num_wifi_client);
 
-		handle_lan2lan_msg_post(get_client_memptr(wlan_client, i)->mac, IPA_LAN_CLIENT_DISCONNECT);
+		handle_lan2lan_msg_post(get_client_memptr(wlan_client, i)->mac, IPA_LAN_CLIENT_DISCONNECT, IPA_IP_v4);
+		handle_lan2lan_msg_post(get_client_memptr(wlan_client, i)->mac, IPA_LAN_CLIENT_DISCONNECT, IPA_IP_v6);
 
         if(get_client_memptr(wlan_client, i)->ipv4_header_set == true)
         {
@@ -2039,8 +2056,45 @@
 	return res;
 }
 
+/*handle reset wifi-client rt-rules */
+int IPACM_Wlan::handle_wlan_client_reset_rt(ipa_ip_type iptype)
+{
+	int i, res = IPACM_SUCCESS;
+
+	/* clean wifi-client routing rules */
+	IPACMDBG("left %d wifi clients to reset ip-type(%d) rules \n ", num_wifi_client, iptype);
+
+	for (i = 0; i < num_wifi_client; i++)
+	{
+		/* Reset RT rules */
+		res = delete_default_qos_rtrules(i, iptype);
+		if (res != IPACM_SUCCESS)
+		{
+			IPACMERR("Failed to delete old iptype(%d) rules.\n", iptype);
+			return res;
+		}
+		/* Pass info to LAN2LAN module */
+		res = handle_lan2lan_msg_post(get_client_memptr(wlan_client, i)->mac, IPA_LAN_CLIENT_DISCONNECT, iptype);
+		if (res != IPACM_SUCCESS)
+		{
+			IPACMERR("Failed to posting delete old iptype(%d) address.\n", iptype);
+			return res;
+		}
+		/* Reset ip-address */
+		if(iptype == IPA_IP_v4)
+		{
+			get_client_memptr(wlan_client, i)->ipv4_set = false;
+		}
+		else
+		{
+			get_client_memptr(wlan_client, i)->ipv6_set = 0;
+		}
+	} /* end of for loop */
+	return res;
+}
+
 /*handle lan2lan internal mesg posting*/
-int IPACM_Wlan::handle_lan2lan_msg_post(uint8_t *mac_addr, ipa_cm_event_id event)
+int IPACM_Wlan::handle_lan2lan_msg_post(uint8_t *mac_addr, ipa_cm_event_id event,ipa_ip_type iptype)
 {
 	int client_index;
 	client_index = get_wlan_client_index(mac_addr);
@@ -2052,7 +2106,8 @@
 
 	ipacm_event_lan_client* lan_client;
 	ipacm_cmd_q_data evt_data;
-	if(get_client_memptr(wlan_client, client_index)->ipv4_set == true) /* handle ipv4 case*/
+	if((get_client_memptr(wlan_client, client_index)->ipv4_set == true)
+		&& (iptype == IPA_IP_v4)) /* handle ipv4 case*/
 	{
 		if(ip_type != IPA_IP_v4 && ip_type != IPA_IP_MAX)
 		{
@@ -2080,7 +2135,8 @@
 		IPACM_EvtDispatcher::PostEvt(&evt_data);
 	}
 
-	if(get_client_memptr(wlan_client, client_index)->ipv6_set > 0) /* handle v6 case: may be multiple v6 addr */
+	if((get_client_memptr(wlan_client, client_index)->ipv6_set > 0)
+		&& (iptype == IPA_IP_v6)) /* handle v6 case: may be multiple v6 addr */
 	{
 		if(ip_type != IPA_IP_v6 && ip_type != IPA_IP_MAX)
 		{
@@ -2624,6 +2680,7 @@
 	return;
 }
 
+/* install TCP control filter rules */
 void IPACM_Wlan::install_tcp_ctl_flt_rule(ipa_ip_type iptype)
 {
 	if (rx_prop == NULL)
@@ -2796,4 +2853,4 @@
 		}
 	}
 	return IPACM_SUCCESS;
-}
\ No newline at end of file
+}
diff --git a/ipanat/src/Android.mk b/ipanat/src/Android.mk
new file mode 100644
index 0000000..a1116df
--- /dev/null
+++ b/ipanat/src/Android.mk
@@ -0,0 +1,24 @@
+ifneq (,$(filter $(QCOM_BOARD_PLATFORMS),$(TARGET_BOARD_PLATFORM)))
+ifneq (, $(filter aarch64 arm arm64, $(TARGET_ARCH)))
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/../inc
+LOCAL_C_INCLUDES += $(LOCAL_PATH)
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+LOCAL_SRC_FILES := ipa_nat_drv.c \
+                   ipa_nat_drvi.c
+
+LOCAL_CFLAGS := -DDEBUG
+LOCAL_MODULE := libipanat
+LOCAL_MODULE_TAGS := debug
+LOCAL_PRELINK_MODULE := false
+
+include $(BUILD_SHARED_LIBRARY)
+
+endif # $(TARGET_ARCH)
+endif
