diff options
-rw-r--r-- | data-ipa-cfg-mgr/hal/src/HAL.cpp | 3 | ||||
-rw-r--r-- | data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp | 4 | ||||
-rw-r--r-- | data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp | 29 |
3 files changed, 29 insertions, 7 deletions
diff --git a/data-ipa-cfg-mgr/hal/src/HAL.cpp b/data-ipa-cfg-mgr/hal/src/HAL.cpp index 002bbb4..c2498cd 100644 --- a/data-ipa-cfg-mgr/hal/src/HAL.cpp +++ b/data-ipa-cfg-mgr/hal/src/HAL.cpp @@ -471,6 +471,9 @@ Return<void> HAL::setDataLimit fl.setResult(res.success, res.errMsg); } else { RET ipaReturn = mIPA->setQuota(upstream.c_str(), limit); + if(ipaReturn == RET::FAIL_TRY_AGAIN) { + ipaReturn = RET::SUCCESS; + } BoolResult res = ipaResultToBoolResult(ipaReturn); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp index 3e54a27..7503df1 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp @@ -1542,8 +1542,8 @@ int IPACM_Lan::handle_wan_up(ipa_ip_type ip_type) /* only offload UL traffic of certain clients */ #ifdef FEATURE_IPACM_HAL flt_rule_entry.rule.attrib.attrib_mask |= IPA_FLT_SRC_ADDR; - flt_rule_entry.rule.attrib.u.v4.dst_addr_mask = prefix[IPA_IP_v4].v4Mask; - flt_rule_entry.rule.attrib.u.v4.dst_addr = prefix[IPA_IP_v4].v4Addr; + flt_rule_entry.rule.attrib.u.v4.src_addr_mask = prefix[IPA_IP_v4].v4Mask; + flt_rule_entry.rule.attrib.u.v4.src_addr = prefix[IPA_IP_v4].v4Addr; #endif memcpy(&m_pFilteringTable->rules[0], &flt_rule_entry, sizeof(flt_rule_entry)); if (false == m_filtering.AddFilteringRule(m_pFilteringTable)) diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp index 853cc89..977b9b1 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp @@ -429,6 +429,17 @@ RET IPACM_OffloadManager::setUpstream(const char *upstream_name, const Prefix& g /* reset the stats when switch from LTE->STA */ if (index != default_gw_index) { IPACMDBG_H(" interface switched to %s\n", upstream_name); + if (upstream_v4_up == true) { + IPACMDBG_H("clean upstream for ipv4-fam(%d) upstream_v4_up(%d)\n", gw_addr_v4.fam, upstream_v4_up); + post_route_evt(IPA_IP_v4, default_gw_index, IPA_WAN_UPSTREAM_ROUTE_DEL_EVENT, gw_addr_v4); + upstream_v4_up = false; + } + if (upstream_v6_up == true) { + IPACMDBG_H("clean upstream for ipv6-fam(%d) upstream_v6_up(%d)\n", gw_addr_v6.fam, upstream_v6_up); + post_route_evt(IPA_IP_v6, default_gw_index, IPA_WAN_UPSTREAM_ROUTE_DEL_EVENT, gw_addr_v6); + upstream_v6_up = false; + } + default_gw_index = INVALID_IFACE; if(memcmp(upstream_name, "wlan0", sizeof("wlan0")) == 0) { IPACMDBG_H("switch to STA mode, need reset wlan-fw stats\n"); @@ -535,7 +546,7 @@ RET IPACM_OffloadManager::stopAllOffload() RET IPACM_OffloadManager::setQuota(const char * upstream_name /* upstream */, uint64_t mb/* limit */) { wan_ioctl_set_data_quota quota; - int fd = -1; + int fd = -1,rc = 0; if ((fd = open(DEVICE_NAME, O_RDWR)) < 0) { @@ -555,12 +566,20 @@ RET IPACM_OffloadManager::setQuota(const char * upstream_name /* upstream */, ui IPACMDBG_H("SET_DATA_QUOTA %s %llu", quota.interface_name, (long long)mb); - if (ioctl(fd, WAN_IOC_SET_DATA_QUOTA, "a) < 0) { - IPACMERR("IOCTL WAN_IOCTL_SET_DATA_QUOTA call failed: %s", strerror(errno)); + rc = ioctl(fd, WAN_IOC_SET_DATA_QUOTA, "a); + + if(rc != 0) + { close(fd); - return FAIL_TRY_AGAIN; + IPACMERR("IOCTL WAN_IOCTL_SET_DATA_QUOTA call failed: %s rc: %d\n", strerror(errno),rc); + if (errno == ENODEV) { + IPACMDBG_H("Invalid argument.\n"); + return FAIL_UNSUPPORTED; + } + else { + return FAIL_TRY_AGAIN; + } } - close(fd); return SUCCESS; } |