summaryrefslogtreecommitdiff
path: root/ipacm/src/IPACM_ConntrackListener.cpp
diff options
context:
space:
mode:
authorSunil Paidimarri <hisunil@codeaurora.org>2016-11-29 12:44:38 -0800
committerSunil Paidimarri <hisunil@codeaurora.org>2016-12-02 22:50:17 -0800
commit46e9c26e617e6614dae8fbe8fde55799b89f3587 (patch)
tree1b8787e678078eb97ed09302bc44d45889e5aa58 /ipacm/src/IPACM_ConntrackListener.cpp
parentdd76eeb7295d4a0fff97267806ee6f90d8786cda (diff)
downloadipacfg-mgr-46e9c26e617e6614dae8fbe8fde55799b89f3587.tar.gz
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
Diffstat (limited to 'ipacm/src/IPACM_ConntrackListener.cpp')
-rw-r--r--ipacm/src/IPACM_ConntrackListener.cpp31
1 files changed, 20 insertions, 11 deletions
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 @@ void IPACM_ConntrackListener::event_callback(ipa_cm_event_id evt,
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 @@ void IPACM_ConntrackListener::TriggerWANUp(void *in_param)
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 @@ error:
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;
}
}