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;
}
}