diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h
index ec15b30..524f4ac 100644
--- a/ipacm/inc/IPACM_Config.h
+++ b/ipacm/inc/IPACM_Config.h
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
diff --git a/ipacm/inc/IPACM_OffloadManager.h b/ipacm/inc/IPACM_OffloadManager.h
index bade0aa..b319b04 100644
--- a/ipacm/inc/IPACM_OffloadManager.h
+++ b/ipacm/inc/IPACM_OffloadManager.h
@@ -110,6 +110,10 @@
 
 	int resetTetherStats(const char *upstream_name);
 
+#ifdef FEATURE_IPACM_RESTART
+	int push_iface_up(const char *if_name, bool upstream);
+#endif
+
 	static const char *DEVICE_NAME;
 
 	/* cache the add_downstream events if netdev is not ready */
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index 5fee0fa..94623f9 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -234,6 +234,11 @@
 
 	void handle_SCC_MCC_switch(ipa_ip_type);
 
+#ifdef FEATURE_IPACM_RESTART
+	/*query wlan-clients */
+	int ipa_query_wlan_client();
+#endif
+
 };
 
 
diff --git a/ipacm/src/Android.mk b/ipacm/src/Android.mk
index 2b2bd4b..0a7f2ed 100644
--- a/ipacm/src/Android.mk
+++ b/ipacm/src/Android.mk
@@ -9,6 +9,8 @@
 BOARD_IPAv3_LIST += sdm710
 BOARD_IPAv3_LIST += msmnile
 BOARD_IPAv3_LIST += $(MSMSTEPPE)
+BOARD_IPACM_RESTART_LIST := sdm845
+BOARD_IPACM_RESTART_LIST += sdm710
 
 ifneq ($(call is-board-platform-in-list,$(BOARD_PLATFORM_LIST)),true)
 ifneq (,$(filter $(QCOM_BOARD_PLATFORMS),$(TARGET_BOARD_PLATFORM)))
@@ -35,6 +37,10 @@
 LOCAL_CFLAGS += -DFEATURE_IPA_V3
 endif
 
+ifeq ($(call is-board-platform-in-list,$(BOARD_IPACM_RESTART_LIST)),true)
+LOCAL_CFLAGS += -DFEATURE_IPACM_RESTART
+endif
+
 filetoadd = bionic/libc/kernel/arch-arm/asm/posix_types.h
 LOCAL_CFLAGS += $(shell if [ -a $(filetoadd) ] ; then echo -include $(filetoadd) ; fi ;)
 filetoadd = bionic/libc/kernel/arch-arm/asm/byteorder.h
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 71b397b..289044a 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -537,7 +537,7 @@
 			IPACMERR("IPA_HANDLE_WAN_UP_TETHER tether_if(%d), not valid (%d) ignore\n", data_wan_tether->if_index_tether, ipa_if_num);
 			return;
 		}
-#else /* not offload rndis on WIFI mode on MSM targets sky*/
+#else /* not offload rndis on WIFI mode on MSM targets */
 		if (data_wan_tether->is_sta)
 		{
 			IPACMERR("Not support RNDIS offload on WIFI mode, dun install UL filter rules for WIFI mode\n");
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index 55a3fd5..3fd68af 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -108,6 +108,13 @@
 
 IPACM_Neighbor *neigh;
 IPACM_IfaceManager *ifacemgr;
+
+#ifdef FEATURE_IPACM_RESTART
+int ipa_reset();
+/* support ipacm restart */
+int ipa_query_wlan_client();
+#endif
+
 #ifdef FEATURE_IPACM_HAL
 	IPACM_OffloadManager* OffloadMng;
 	HAL *hal;
@@ -845,6 +852,11 @@
 	(void)argc;
 	(void)argv;
 
+#ifdef FEATURE_IPACM_RESTART
+	IPACMDBG_H("RESET IPA-HW rules\n");
+	ipa_reset();
+#endif
+
 	neigh = new IPACM_Neighbor();
 	ifacemgr = new IPACM_IfaceManager();
 #ifdef FEATURE_IPACM_HAL
@@ -1048,3 +1060,25 @@
 	close(fd);
 	return IPACM_SUCCESS;
 }
+
+#ifdef FEATURE_IPACM_RESTART
+int ipa_reset()
+{
+	int fd = -1;
+
+	if ((fd = open(IPA_DEVICE_NAME, O_RDWR)) < 0) {
+		IPACMERR("Failed opening %s.\n", IPA_DEVICE_NAME);
+		return IPACM_FAILURE;
+	}
+
+	if (ioctl(fd, IPA_IOC_CLEANUP) < 0) {
+		IPACMERR("IOCTL IPA_IOC_CLEANUP call failed: %s \n", strerror(errno));
+		close(fd);
+		return IPACM_FAILURE;
+	}
+
+	IPACMDBG_H("send IPA_IOC_CLEANUP \n");
+	close(fd);
+	return IPACM_SUCCESS;
+}
+#endif
diff --git a/ipacm/src/IPACM_OffloadManager.cpp b/ipacm/src/IPACM_OffloadManager.cpp
index 2ee48d3..12ee5ce 100644
--- a/ipacm/src/IPACM_OffloadManager.cpp
+++ b/ipacm/src/IPACM_OffloadManager.cpp
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -233,6 +233,12 @@
 	if (cache_need)
 	{
 		IPACMDBG_H("addDownstream name(%s) currently not support in ipa \n", downstream_name);
+
+#ifdef FEATURE_IPACM_RESTART
+		/* add ipacm restart support */
+		push_iface_up(downstream_name, false);
+#endif
+
 		/* copy to the cache */
 		for(int i = 0; i < MAX_EVENT_CACHE ;i++)
 		{
@@ -366,7 +372,6 @@
 			for (index = 0; index < MAX_EVENT_CACHE; index++) {
 				if (event_cache[index].valid == true &&
 					event_cache[index ].event == IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT) {
-					event_cache[index].valid = false;
 					memset(event_cache, 0, MAX_EVENT_CACHE*sizeof(framework_event_cache));
 					return SUCCESS;
 				}
@@ -404,6 +409,10 @@
 		if (cache_need)
 		{
 			IPACMDBG_H("setUpstream name(%s) currently not support in ipa \n", upstream_name);
+#ifdef FEATURE_IPACM_RESTART
+			/* add ipacm restart support */
+			push_iface_up(upstream_name, true);
+#endif
 			/* copy to the cache */
 			for(int i = 0; i < MAX_EVENT_CACHE ;i++)
 			{
@@ -416,7 +425,7 @@
 					memcpy(&event_cache[latest_cache_index].prefix_cache, &gw_addr_v4, sizeof(event_cache[latest_cache_index].prefix_cache));
 					memcpy(&event_cache[latest_cache_index].prefix_cache_v6, &gw_addr_v6, sizeof(event_cache[latest_cache_index].prefix_cache_v6));
 					if (gw_addr_v4.fam == V4) {
-						IPACMDBG_H("cache event(%d) ipv4 fateway: (%x) dev(%s) on entry (%d)\n",
+						IPACMDBG_H("cache event(%d) ipv4 gateway: (%x) dev(%s) on entry (%d)\n",
 							event_cache[latest_cache_index].event,
 							event_cache[latest_cache_index].prefix_cache.v4Addr,
 							event_cache[latest_cache_index].dev_name,
@@ -738,7 +747,6 @@
 		return FAIL_INPUT_CHECK;
 	}
 	stats.reset_stats = true;
-
 	if (ioctl(fd, WAN_IOC_RESET_TETHER_STATS, &stats) < 0) {
 		IPACMERR("IOCTL WAN_IOC_RESET_TETHER_STATS call failed: %s", strerror(errno));
 		close(fd);
@@ -789,3 +797,88 @@
 	IPACMDBG_H(" not found netdev (%s) has cached event\n", interface_name);
 	return rel;
 }
+
+#ifdef FEATURE_IPACM_RESTART
+int IPACM_OffloadManager::push_iface_up(const char * if_name, bool upstream)
+{
+	ipacm_cmd_q_data evt_data;
+	ipacm_event_data_fid *data_fid;
+	ipacm_event_data_mac *data = NULL;
+	int index;
+
+	IPACMDBG_H("name %s, upstream %d\n",
+							 if_name, upstream);
+
+	if(ipa_get_if_index(if_name, &index))
+	{
+		IPACMERR("netdev(%s) not registered ignored\n", if_name);
+		return SUCCESS;
+	}
+
+	if(strncmp(if_name, "rmnet_data", 10) == 0 && upstream)
+	{
+		data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+		if(data_fid == NULL)
+		{
+			IPACMERR("unable to allocate memory for event data_fid\n");
+			return FAIL_HARDWARE;
+		}
+		data_fid->if_index = index;
+		evt_data.event = IPA_LINK_UP_EVENT;
+		evt_data.evt_data = data_fid;
+		IPACMDBG_H("Posting IPA_LINK_UP_EVENT with if index: %d\n",
+							 data_fid->if_index);
+		IPACM_EvtDispatcher::PostEvt(&evt_data);
+	}
+
+	if(strncmp(if_name, "rndis", 5) == 0 && !upstream)
+	{
+		data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+		if(data_fid == NULL)
+		{
+			IPACMERR("unable to allocate memory for event data_fid\n");
+			return FAIL_HARDWARE;
+		}
+		data_fid->if_index = index;
+		evt_data.event = IPA_USB_LINK_UP_EVENT;
+		evt_data.evt_data = data_fid;
+		IPACMDBG_H("Posting usb IPA_LINK_UP_EVENT with if index: %d\n",
+				data_fid->if_index);
+		IPACM_EvtDispatcher::PostEvt(&evt_data);
+	}
+
+	if((strncmp(if_name, "softap", 6) == 0 || strncmp(if_name, "wlan", 4) == 0 ) && !upstream)
+	{
+		data_fid = (ipacm_event_data_fid *)malloc(sizeof(ipacm_event_data_fid));
+		if(data_fid == NULL)
+		{
+			IPACMERR("unable to allocate memory for event data_fid\n");
+			return FAIL_HARDWARE;
+		}
+		data_fid->if_index = index;
+		evt_data.event = IPA_WLAN_AP_LINK_UP_EVENT;
+		evt_data.evt_data = data_fid;
+		IPACMDBG_H("Posting IPA_WLAN_AP_LINK_UP_EVENT with if index: %d\n",
+			data_fid->if_index);
+		IPACM_EvtDispatcher::PostEvt(&evt_data);
+	}
+
+	if(strncmp(if_name, "wlan", 4) == 0 && upstream)
+	{
+		data = (ipacm_event_data_mac *)malloc(sizeof(ipacm_event_data_mac));
+		if(data == NULL)
+		{
+			IPACMERR("unable to allocate memory for event_wlan data\n");
+			return FAIL_HARDWARE;
+		}
+		data->if_index = index;
+		evt_data.event = IPA_WLAN_STA_LINK_UP_EVENT;
+		evt_data.evt_data = data;
+		IPACMDBG_H("Posting IPA_WLAN_STA_LINK_UP_EVENT with if index: %d\n",
+			data_fid->if_index);
+		IPACM_EvtDispatcher::PostEvt(&evt_data);
+	}
+
+	return IPACM_SUCCESS;
+}
+#endif
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 666ee10..4925e1c 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
@@ -267,6 +267,10 @@
 						IPACMDBG_H("IPv4 address:0x%x, IPv4 address mask:0x%x\n",
 										 info->ipv4_addr, info->addr_mask);
 						IPACM_EvtDispatcher::PostEvt(&evt_data);
+#ifdef FEATURE_IPACM_RESTART
+						/* Query wlan-clients */
+						ipa_query_wlan_client();
+#endif
 					}
 
 					if(handle_addr_evt(data) == IPACM_FAILURE)
@@ -557,7 +561,7 @@
 				memcpy(&prefix[data->prefix.iptype], &data->prefix,
 					sizeof(prefix[data->prefix.iptype]));
 
-				if(is_upstream_set[data->prefix.iptype] == true)
+				if (is_upstream_set[data->prefix.iptype] == true)
 				{
 					IPACMDBG_H("Upstream was set before, adding modem UL rules.\n");
 					if(ip_type == IPA_IP_MAX || ip_type == data->prefix.iptype)
@@ -2246,6 +2250,28 @@
 	return;
 }
 
+#ifdef FEATURE_IPACM_RESTART
+int IPACM_Wlan::ipa_query_wlan_client()
+{
+	int fd = -1;
+
+	if ((fd = open(IPA_DEVICE_NAME, O_RDWR)) < 0) {
+		IPACMERR("Failed opening %s.\n", IPA_DEVICE_NAME);
+		return IPACM_FAILURE;
+	}
+
+	if (ioctl(fd, IPA_IOC_QUERY_WLAN_CLIENT) < 0) {
+		IPACMERR("IOCTL IPA_IOC_QUERY_WLAN_CLIENT call failed: %s \n", strerror(errno));
+		close(fd);
+		return IPACM_FAILURE;
+	}
+
+	IPACMDBG_H("send IPA_IOC_QUERY_WLAN_CLIENT \n");
+	close(fd);
+	return IPACM_SUCCESS;
+}
+#endif
+
 void IPACM_Wlan::eth_bridge_handle_wlan_mode_switch()
 {
 	uint32_t i;
