summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-10-18 17:03:56 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-10-18 17:03:56 +0000
commitda0af80f9a1eba30270e58efeac9481c4dabdc46 (patch)
treecacb79087cb949b56478519224737573dbc4ad4d
parentf938f08b3635e9a88bf338a28c847223518efe9b (diff)
parentc6b4664ae094b5927f3c89465848dc4dd3b6ccbd (diff)
downloadipacfg-mgr-oreo-m2-s5-release.tar.gz
Change-Id: I9b162268bddb7b5023ff8585308ca1596baf95c9
-rw-r--r--msm8998/hal/src/HAL.cpp14
-rw-r--r--msm8998/ipacm/inc/IPACM_OffloadManager.h2
-rw-r--r--msm8998/ipacm/src/IPACM_OffloadManager.cpp29
3 files changed, 32 insertions, 13 deletions
diff --git a/msm8998/hal/src/HAL.cpp b/msm8998/hal/src/HAL.cpp
index 59f978d..e19a149 100644
--- a/msm8998/hal/src/HAL.cpp
+++ b/msm8998/hal/src/HAL.cpp
@@ -506,8 +506,7 @@ Return<void> HAL::setUpstreamParameters
BoolResult res = makeInputCheckFailure("Not initialized (setUpstreamParameters)");
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
- }
- else if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) {
+ } else if (!v4AddrParser.addV4(v4Addr) && !v4Addr.empty()) {
BoolResult res = makeInputCheckFailure(v4AddrParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
@@ -519,7 +518,7 @@ Return<void> HAL::setUpstreamParameters
BoolResult res = makeInputCheckFailure(v6GwParser.getLastErrAsStr());
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
- } else {
+ } else if (iface.size()>= 1) {
RET ipaReturn = mIPA->setUpstream(
iface.c_str(),
v4GwParser.getFirstPrefix(),
@@ -527,6 +526,15 @@ Return<void> HAL::setUpstreamParameters
BoolResult res = ipaResultToBoolResult(ipaReturn);
hidl_cb(res.success, res.errMsg);
fl.setResult(res.success, res.errMsg);
+ } else {
+ /* send NULL iface string when upstream down */
+ RET ipaReturn = mIPA->setUpstream(
+ NULL,
+ v4GwParser.getFirstPrefix(),
+ v6GwParser.getFirstPrefix());
+ BoolResult res = ipaResultToBoolResult(ipaReturn);
+ hidl_cb(res.success, res.errMsg);
+ fl.setResult(res.success, res.errMsg);
}
mLogs.addLog(fl);
diff --git a/msm8998/ipacm/inc/IPACM_OffloadManager.h b/msm8998/ipacm/inc/IPACM_OffloadManager.h
index 72070dd..bade0aa 100644
--- a/msm8998/ipacm/inc/IPACM_OffloadManager.h
+++ b/msm8998/ipacm/inc/IPACM_OffloadManager.h
@@ -96,7 +96,7 @@ public:
private:
- std::list<const char *> valid_ifaces;
+ std::list<std::string> valid_ifaces;
bool upstream_v4_up;
diff --git a/msm8998/ipacm/src/IPACM_OffloadManager.cpp b/msm8998/ipacm/src/IPACM_OffloadManager.cpp
index ca54ea6..2061fd2 100644
--- a/msm8998/ipacm/src/IPACM_OffloadManager.cpp
+++ b/msm8998/ipacm/src/IPACM_OffloadManager.cpp
@@ -212,6 +212,13 @@ RET IPACM_OffloadManager::addDownstream(const char * downstream_name, const Pref
IPACMERR("fail to get iface index.\n");
return FAIL_INPUT_CHECK;
}
+ /* Iface is valid, add to list if not present */
+ if (std::find(valid_ifaces.begin(), valid_ifaces.end(), std::string(downstream_name)) == valid_ifaces.end())
+ {
+ /* Iface is new, add it to the list */
+ valid_ifaces.push_back(downstream_name);
+ IPACMDBG_H("add iface(%s) to list\n", downstream_name);
+ }
/* check if downstream netdev driver finished its configuration on IPA-HW */
if (IPACM_Iface::ipacmcfg->CheckNatIfaces(downstream_name))
@@ -263,13 +270,6 @@ RET IPACM_OffloadManager::addDownstream(const char * downstream_name, const Pref
return SUCCESS;
}
- /* Iface is valid, add to list if not present */
- if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end())
- {
- /* Iface is new, add it to the list */
- valid_ifaces.push_back(downstream_name);
- }
-
evt_data = (ipacm_event_ipahal_stream*)malloc(sizeof(ipacm_event_ipahal_stream));
if(evt_data == NULL)
{
@@ -303,7 +303,7 @@ RET IPACM_OffloadManager::removeDownstream(const char * downstream_name, const P
IPACMERR("iface length is 0.\n");
return FAIL_HARDWARE;
}
- if (std::find(valid_ifaces.begin(), valid_ifaces.end(), downstream_name) == valid_ifaces.end())
+ if (std::find(valid_ifaces.begin(), valid_ifaces.end(), std::string(downstream_name)) == valid_ifaces.end())
{
IPACMERR("iface is not present in list.\n");
return FAIL_HARDWARE;
@@ -493,12 +493,23 @@ RET IPACM_OffloadManager::setUpstream(const char *upstream_name, const Prefix& g
RET IPACM_OffloadManager::stopAllOffload()
{
Prefix v4gw, v6gw;
+ RET result = SUCCESS;
+
memset(&v4gw, 0, sizeof(v4gw));
memset(&v6gw, 0, sizeof(v6gw));
v4gw.fam = V4;
v6gw.fam = V6;
IPACMDBG_H("posting setUpstream(NULL), ipv4-fam(%d) ipv6-fam(%d)\n", v4gw.fam, v6gw.fam);
- return setUpstream(NULL, v4gw, v6gw);
+ result = setUpstream(NULL, v4gw, v6gw);
+
+ /* reset the event cache */
+ default_gw_index = INVALID_IFACE;
+ upstream_v4_up = false;
+ upstream_v6_up = false;
+ memset(event_cache, 0, MAX_EVENT_CACHE*sizeof(framework_event_cache));
+ latest_cache_index = 0;
+ valid_ifaces.clear();
+ return result;
}
RET IPACM_OffloadManager::setQuota(const char * upstream_name /* upstream */, uint64_t mb/* limit */)