IPACM: Handle 2 consecutive default route events

On receive 2 consecutive default route event with
different ip address, update nat table with new
wan ip address

Change-Id: Ie7302cdca5e558ced2998f928f068be89e97aba8
CRs-Fixed: 1096838
diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp
index 38ab7da..53873cd 100644
--- a/ipacm/src/IPACM_ConntrackListener.cpp
+++ b/ipacm/src/IPACM_ConntrackListener.cpp
@@ -96,10 +96,7 @@
 	 case IPA_HANDLE_WAN_UP:
 			IPACMDBG_H("Received IPA_HANDLE_WAN_UP event\n");
 			CreateConnTrackThreads();
-			if(!isWanUp())
-			{
-				TriggerWANUp(data);
-			}
+			TriggerWANUp(data);
 			break;
 
 	 case IPA_HANDLE_WAN_DOWN:
@@ -356,6 +353,14 @@
 		 return;
 	 }
 
+	 if(isWanUp())
+	 {
+		 if (wan_ipaddr != wanup_data->ipv4_addr)
+			 TriggerWANDown(wan_ipaddr);
+		 else
+			 return;
+	 }
+
 	 WanUp = true;
 	 isStaMode = wanup_data->is_sta;
 	 IPACMDBG("isStaMode: %d\n", isStaMode);
@@ -455,16 +460,20 @@
 
 void IPACM_ConntrackListener::TriggerWANDown(uint32_t wan_addr)
 {
-	 IPACMDBG_H("Deleting ipv4 nat table with");
-	 IPACMDBG_H(" public ip address(0x%x): %d.%d.%d.%d\n", wan_addr,
-		    ((wan_addr>>24) & 0xFF), ((wan_addr>>16) & 0xFF), 
-		    ((wan_addr>>8) & 0xFF), (wan_addr & 0xFF));
-	 
-	 WanUp = false;
+	int ret = 0;
+	IPACMDBG_H("Deleting ipv4 nat table with");
+	IPACMDBG_H(" public ip address(0x%x): %d.%d.%d.%d\n", wan_addr,
+			((wan_addr>>24) & 0xFF), ((wan_addr>>16) & 0xFF),
+			((wan_addr>>8) & 0xFF), (wan_addr & 0xFF));
 
 	 if(nat_inst != NULL)
 	 {
-		 nat_inst->DeleteTable(wan_addr);
+		 ret = nat_inst->DeleteTable(wan_addr);
+		 if (ret)
+			 return;
+
+		 WanUp = false;
+		 wan_ipaddr = 0;
 	 }
 }