aboutsummaryrefslogtreecommitdiff
path: root/data-ipa-cfg-mgr/ipacm/src
diff options
context:
space:
mode:
authorBruno Martins <bgcngm@gmail.com>2018-02-08 22:05:08 +0000
committerDavide Garberi <dade.garberi@gmail.com>2018-02-11 15:42:03 +0100
commit21da10d617900b39e4ca821914d084722657a382 (patch)
tree7944d942099a2a6196ccfac2d2ae2da84f435447 /data-ipa-cfg-mgr/ipacm/src
parent25f9df8691b9b49dac9463a4a0e1da8d48e8720c (diff)
msm8996-common: Update IPACM from upstream
* Tag: LA.UM.6.5.r1-06000-8x96.0 Change-Id: I6e317e043adede343b6ce27cbd76e82f9204fe3d Signed-off-by: Davide Garberi <dade.garberi@gmail.com>
Diffstat (limited to 'data-ipa-cfg-mgr/ipacm/src')
-rw-r--r--data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp4
-rw-r--r--data-ipa-cfg-mgr/ipacm/src/IPACM_OffloadManager.cpp29
2 files changed, 26 insertions, 7 deletions
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, &quota) < 0) {
- IPACMERR("IOCTL WAN_IOCTL_SET_DATA_QUOTA call failed: %s", strerror(errno));
+ rc = ioctl(fd, WAN_IOC_SET_DATA_QUOTA, &quota);
+
+ 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;
}