diff options
author | Sunil Paidimarri <hisunil@codeaurora.org> | 2016-11-29 12:44:38 -0800 |
---|---|---|
committer | Sunil Paidimarri <hisunil@codeaurora.org> | 2016-12-02 22:50:17 -0800 |
commit | 46e9c26e617e6614dae8fbe8fde55799b89f3587 (patch) | |
tree | 1b8787e678078eb97ed09302bc44d45889e5aa58 /ipacm/src/IPACM_ConntrackListener.cpp | |
parent | dd76eeb7295d4a0fff97267806ee6f90d8786cda (diff) | |
download | ipacfg-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.cpp | 31 |
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; } } |