diff options
author | Daniel Mentz <danielmentz@google.com> | 2018-01-19 15:14:29 -0800 |
---|---|---|
committer | Daniel Mentz <danielmentz@google.com> | 2018-01-19 15:14:29 -0800 |
commit | e40ccc24c5915f26ed2e4e9e7dbaa64d2b636767 (patch) | |
tree | c9d9c23c04a44fb803efdd02b4e04e9ffb176bbe | |
parent | 0a91f5dbfd5bfa28fbe7f94124749141de9ec303 (diff) | |
parent | eb9f260cdade1bc33908b3fb30a5590e1dae9715 (diff) | |
download | ipacfg-mgr-e40ccc24c5915f26ed2e4e9e7dbaa64d2b636767.tar.gz |
Merge remote-tracking branch 'goog/qcom/release/LA.UM.7.3.9.00015.1'
Change-Id: I359b88d3419ef72c8f60863d3f446433783529bf
-rw-r--r-- | hal/src/HAL.cpp | 13 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Defs.h | 1 | ||||
-rw-r--r-- | ipacm/src/Android.mk | 3 | ||||
-rw-r--r-- | ipacm/src/IPACM_Config.cpp | 2 | ||||
-rw-r--r-- | ipacm/src/IPACM_ConntrackClient.cpp | 23 | ||||
-rw-r--r-- | ipacm/src/IPACM_ConntrackListener.cpp | 69 | ||||
-rw-r--r-- | ipacm/src/IPACM_Lan.cpp | 12 | ||||
-rw-r--r-- | ipacm/src/IPACM_OffloadManager.cpp | 32 | ||||
-rw-r--r-- | ipacm/src/IPACM_Wan.cpp | 17 |
9 files changed, 96 insertions, 76 deletions
diff --git a/hal/src/HAL.cpp b/hal/src/HAL.cpp index d1d10fd..d72d274 100644 --- a/hal/src/HAL.cpp +++ b/hal/src/HAL.cpp @@ -40,7 +40,7 @@ /* External Includes */ #include <cutils/log.h> -#include <string> +#include <cstring> #include <sys/socket.h> #include <sys/types.h> #include <vector> @@ -93,7 +93,7 @@ void HAL::registerAsSystemService(const char* name) { ALOGI("Successfully registered IOffloadControl"); } - IOffloadConfig::registerAsService(); + ret = IOffloadConfig::registerAsService(); if (ret != 0) ALOGE("Failed to register IOffloadConfig (%d)", ret); else if (DBG) { ALOGI("Successfully registered IOffloadConfig"); @@ -407,6 +407,8 @@ Return<void> HAL::setLocalPrefixes LocalLogBuffer::FunctionLog fl(__func__); fl.addArg("prefixes", prefixesStr); + memset(&res,0,sizeof(BoolResult)); + if (!isInitialized()) { BoolResult res = makeInputCheckFailure("Not initialized"); } else if(prefixesStr.size() < 1) { @@ -469,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); @@ -521,8 +526,8 @@ Return<void> HAL::setUpstreamParameters } else if (iface.size()>= 1) { RET ipaReturn = mIPA->setUpstream( iface.c_str(), - v4GwParser.getFirstPrefix(IP_FAM::V4), - v6GwParser.getFirstPrefix(IP_FAM::V6)); + v4GwParser.getFirstPrefix(), + v6GwParser.getFirstPrefix()); BoolResult res = ipaResultToBoolResult(ipaReturn); hidl_cb(res.success, res.errMsg); fl.setResult(res.success, res.errMsg); diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h index 149c03a..3096974 100644 --- a/ipacm/inc/IPACM_Defs.h +++ b/ipacm/inc/IPACM_Defs.h @@ -40,6 +40,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef IPA_CM_DEFS_H #define IPA_CM_DEFS_H +#include <bits/in_addr.h> #include <unistd.h> #include <fcntl.h> #include <linux/msm_ipa.h> diff --git a/ipacm/src/Android.mk b/ipacm/src/Android.mk index 4f00e8a..8db1dca 100644 --- a/ipacm/src/Android.mk +++ b/ipacm/src/Android.mk @@ -25,9 +25,6 @@ LOCAL_C_INCLUDES += external/libxml2/include LOCAL_C_INCLUDES += external/libnetfilter_conntrack/include LOCAL_C_INCLUDES += external/libnfnetlink/include -LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include -LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr - LOCAL_CFLAGS := -v LOCAL_CFLAGS += -DFEATURE_IPA_ANDROID LOCAL_CFLAGS += -DFEATURE_IPACM_HAL -Wall -Werror -Wno-error=macro-redefined diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp index 78af72b..babc847 100644 --- a/ipacm/src/IPACM_Config.cpp +++ b/ipacm/src/IPACM_Config.cpp @@ -157,7 +157,6 @@ IPACM_Config::IPACM_Config() memset(flt_rule_count_v4, 0, IPA_CLIENT_MAX*sizeof(int)); memset(flt_rule_count_v6, 0, IPA_CLIENT_MAX*sizeof(int)); memset(bridge_mac, 0, IPA_MAC_ADDR_SIZE*sizeof(uint8_t)); - ver = GetIPAVer(true); IPACMDBG_H(" create IPACM_Config constructor\n"); return; @@ -184,6 +183,7 @@ int IPACM_Config::Init(void) { IPACMERR("Failed opening %s.\n", DEVICE_NAME); } + ver = GetIPAVer(true); #ifdef FEATURE_IPACM_HAL strlcpy(IPACM_config_file, "/vendor/etc/IPACM_cfg.xml", sizeof(IPACM_config_file)); #else diff --git a/ipacm/src/IPACM_ConntrackClient.cpp b/ipacm/src/IPACM_ConntrackClient.cpp index d8f7f73..3eab6fa 100644 --- a/ipacm/src/IPACM_ConntrackClient.cpp +++ b/ipacm/src/IPACM_ConntrackClient.cpp @@ -174,6 +174,12 @@ int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Bridge_Addrs uint32_t ipv4_addr; struct ifreq ifr; + /* retrieve bridge interface ipv4 address */ + memset(&ifr, 0, sizeof(struct ifreq)); + ifr.ifr_addr.sa_family = AF_INET; + (void)strlcpy(ifr.ifr_name, IPACM_Iface::ipacmcfg->ipa_virtual_iface_name, sizeof(ifr.ifr_name)); + IPACMDBG("bridge interface name (%s)\n", ifr.ifr_name); + if(strlen(IPACM_Iface::ipacmcfg->ipa_virtual_iface_name) >= sizeof(ifr.ifr_name)) { IPACMERR("interface name overflows: len %zu\n", @@ -182,12 +188,6 @@ int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Bridge_Addrs return -1; } - /* retrieve bridge interface ipv4 address */ - memset(&ifr, 0, sizeof(struct ifreq)); - ifr.ifr_addr.sa_family = AF_INET; - (void)strlcpy(ifr.ifr_name, IPACM_Iface::ipacmcfg->ipa_virtual_iface_name, sizeof(ifr.ifr_name)); - IPACMDBG("bridge interface name (%s)\n", ifr.ifr_name); - ret = ioctl(fd, SIOCGIFADDR, &ifr); if (ret < 0) { @@ -217,7 +217,7 @@ int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Bridge_Addrs nfct_filter_add_attr(filter, NFCT_FILTER_SRC_IPV4, &filter_ipv4); - return 0; + return 0; } int IPACM_ConntrackClient::IPA_Conntrack_Filters_Ignore_Local_Iface @@ -387,7 +387,6 @@ int IPACM_ConntrackClient::IPA_Conntrack_UDP_Filter_Init(void) void* IPACM_ConntrackClient::UDPConnTimeoutUpdate(void *ptr) { - NatApp *nat_inst = NULL; ptr = NULL; #ifdef IPACM_DEBUG @@ -469,7 +468,7 @@ void* IPACM_ConntrackClient::TCPRegisterWithConnTrack(void *) } /* Register callback with netfilter handler */ - IPACMDBG_H("tcp handle:%p, fd:%d\n", pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl)); + IPACMDBG_H("tcp handle:%pK, fd:%d\n", pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl)); #ifndef CT_OPT nfct_callback_register(pClient->tcp_hdl, (nf_conntrack_msg_type) (NFCT_T_UPDATE | NFCT_T_DESTROY | NFCT_T_NEW), @@ -560,7 +559,7 @@ void* IPACM_ConntrackClient::UDPRegisterWithConnTrack(void *) } /* Register callback with netfilter handler */ - IPACMDBG_H("udp handle:%p, fd:%d\n", pClient->udp_hdl, nfct_fd(pClient->udp_hdl)); + IPACMDBG_H("udp handle:%pK, fd:%d\n", pClient->udp_hdl, nfct_fd(pClient->udp_hdl)); nfct_callback_register(pClient->udp_hdl, (nf_conntrack_msg_type)(NFCT_T_NEW | NFCT_T_DESTROY), IPAConntrackEventCB, @@ -687,7 +686,7 @@ void IPACM_ConntrackClient::UpdateUDPFilters(void *param, bool isWan) if(ret == -1) { PERROR("unable to attach the filter to udp handle\n"); - IPACMERR("udp handle:%p, fd:%d Error: %d\n",pClient->udp_hdl, nfct_fd(pClient->udp_hdl), ret); + IPACMERR("udp handle:%pK, fd:%d Error: %d\n",pClient->udp_hdl, nfct_fd(pClient->udp_hdl), ret); return; } } @@ -732,7 +731,7 @@ void IPACM_ConntrackClient::UpdateTCPFilters(void *param, bool isWan) if(ret == -1) { PERROR("unable to attach the filter to tcp handle\n"); - IPACMERR("tcp handle:%p, fd:%d Error: %d\n",pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl), ret); + IPACMERR("tcp handle:%pK, fd:%d Error: %d\n",pClient->tcp_hdl, nfct_fd(pClient->tcp_hdl), ret); return; } } diff --git a/ipacm/src/IPACM_ConntrackListener.cpp b/ipacm/src/IPACM_ConntrackListener.cpp index e02ca10..4a0c1c1 100644 --- a/ipacm/src/IPACM_ConntrackListener.cpp +++ b/ipacm/src/IPACM_ConntrackListener.cpp @@ -387,38 +387,32 @@ int IPACM_ConntrackListener::CreateConnTrackThreads(void) if(isCTReg == false) { - if(!tcp_thread) + ret = pthread_create(&tcp_thread, NULL, IPACM_ConntrackClient::TCPRegisterWithConnTrack, NULL); + if(0 != ret) { - ret = pthread_create(&tcp_thread, NULL, IPACM_ConntrackClient::TCPRegisterWithConnTrack, NULL); - if(0 != ret) - { - IPACMERR("unable to create TCP conntrack event listner thread\n"); - PERROR("unable to create TCP conntrack\n"); - return -1; - } + IPACMERR("unable to create TCP conntrack event listner thread\n"); + PERROR("unable to create TCP conntrack\n"); + goto error; + } - IPACMDBG("created TCP conntrack event listner thread\n"); - if(pthread_setname_np(tcp_thread, "tcp ct listener") != 0) - { - IPACMERR("unable to set thread name\n"); - } + IPACMDBG("created TCP conntrack event listner thread\n"); + if(pthread_setname_np(tcp_thread, "tcp ct listener") != 0) + { + IPACMERR("unable to set thread name\n"); } - if(!udp_thread) + ret = pthread_create(&udp_thread, NULL, IPACM_ConntrackClient::UDPRegisterWithConnTrack, NULL); + if(0 != ret) { - ret = pthread_create(&udp_thread, NULL, IPACM_ConntrackClient::UDPRegisterWithConnTrack, NULL); - if(0 != ret) - { - IPACMERR("unable to create UDP conntrack event listner thread\n"); - PERROR("unable to create UDP conntrack\n"); - goto error; - } + IPACMERR("unable to create UDP conntrack event listner thread\n"); + PERROR("unable to create UDP conntrack\n"); + goto error; + } - IPACMDBG("created UDP conntrack event listner thread\n"); - if(pthread_setname_np(udp_thread, "udp ct listener") != 0) - { - IPACMERR("unable to set thread name\n"); - } + IPACMDBG("created UDP conntrack event listner thread\n"); + if(pthread_setname_np(udp_thread, "udp ct listener") != 0) + { + IPACMERR("unable to set thread name\n"); } isCTReg = true; @@ -436,21 +430,18 @@ int IPACM_ConntrackListener::CreateNatThreads(void) if(isNatThreadStart == false) { - if(!udpcto_thread) + ret = pthread_create(&udpcto_thread, NULL, IPACM_ConntrackClient::UDPConnTimeoutUpdate, NULL); + if(0 != ret) { - ret = pthread_create(&udpcto_thread, NULL, IPACM_ConntrackClient::UDPConnTimeoutUpdate, NULL); - if(0 != ret) - { - IPACMERR("unable to create udp conn timeout thread\n"); - PERROR("unable to create udp conn timeout\n"); - goto error; - } + IPACMERR("unable to create udp conn timeout thread\n"); + PERROR("unable to create udp conn timeout\n"); + goto error; + } - IPACMDBG("created upd conn timeout thread\n"); - if(pthread_setname_np(udpcto_thread, "udp conn timeout") != 0) - { - IPACMERR("unable to set thread name\n"); - } + IPACMDBG("created upd conn timeout thread\n"); + if(pthread_setname_np(udpcto_thread, "udp conn timeout") != 0) + { + IPACMERR("unable to set thread name\n"); } isNatThreadStart = true; diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp index 21bf7c0..3c9cc72 100644 --- a/ipacm/src/IPACM_Lan.cpp +++ b/ipacm/src/IPACM_Lan.cpp @@ -1574,8 +1574,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)) @@ -4381,6 +4381,7 @@ void IPACM_Lan::eth_bridge_post_event(ipa_cm_event_id evt, ipa_ip_type iptype, u { ipacm_cmd_q_data eth_bridge_evt; ipacm_event_eth_bridge *evt_data_eth_bridge; + const char *eventName = IPACM_Iface::ipacmcfg->getEventName(evt); #ifdef FEATURE_L2TP ipacm_event_data_all *evt_data_all; #endif @@ -4449,8 +4450,11 @@ void IPACM_Lan::eth_bridge_post_event(ipa_cm_event_id evt, ipa_ip_type iptype, u } eth_bridge_evt.evt_data = (void*)evt_data_eth_bridge; } - IPACMDBG_H("Posting event %s\n", - IPACM_Iface::ipacmcfg->getEventName(evt)); + if (eventName != NULL) + { + IPACMDBG_H("Posting event %s\n", + eventName); + } IPACM_EvtDispatcher::PostEvt(ð_bridge_evt); } diff --git a/ipacm/src/IPACM_OffloadManager.cpp b/ipacm/src/IPACM_OffloadManager.cpp index d872222..777edb6 100644 --- a/ipacm/src/IPACM_OffloadManager.cpp +++ b/ipacm/src/IPACM_OffloadManager.cpp @@ -345,8 +345,14 @@ RET IPACM_OffloadManager::setUpstream(const char *upstream_name, const Prefix& g RET result = SUCCESS; /* if interface name is NULL, default route is removed */ - IPACMDBG_H("setUpstream upstream_name(%s), ipv4-fam(%d) ipv6-fam(%d)\n", upstream_name, gw_addr_v4.fam, gw_addr_v6.fam); - + if(upstream_name != NULL) + { + IPACMDBG_H("setUpstream upstream_name(%s), ipv4-fam(%d) ipv6-fam(%d)\n", upstream_name, gw_addr_v4.fam, gw_addr_v6.fam); + } + else + { + IPACMDBG_H("setUpstream clean upstream_name for ipv4-fam(%d) ipv6-fam(%d)\n", gw_addr_v4.fam, gw_addr_v6.fam); + } if(upstream_name == NULL) { if (default_gw_index == INVALID_IFACE) { @@ -354,12 +360,12 @@ RET IPACM_OffloadManager::setUpstream(const char *upstream_name, const Prefix& g return FAIL_INPUT_CHECK; } if (gw_addr_v4.fam == V4 && upstream_v4_up == true) { - IPACMDBG_H("clean upstream(%s) for ipv4-fam(%d) upstream_v4_up(%d)\n", upstream_name, gw_addr_v4.fam, upstream_v4_up); + 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 (gw_addr_v6.fam == V6 && upstream_v6_up == true) { - IPACMDBG_H("clean upstream(%s) for ipv6-fam(%d) upstream_v6_up(%d)\n", upstream_name, gw_addr_v6.fam, upstream_v6_up); + 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; } @@ -530,7 +536,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) { @@ -550,12 +556,20 @@ RET IPACM_OffloadManager::setQuota(const char * upstream_name /* upstream */, ui IPACMDBG_H("SET_DATA_QUOTA %s %lu", quota.interface_name, 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; } diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp index cf16c71..ffdbdae 100644 --- a/ipacm/src/IPACM_Wan.cpp +++ b/ipacm/src/IPACM_Wan.cpp @@ -756,7 +756,10 @@ void IPACM_Wan::event_callback(ipa_cm_event_id event, void *param) #else IPACMDBG_H("adding routing table(upstream), dev (%s) ip-type(%d)\n", dev_name,data->iptype); #endif - handle_route_add_evt(data->iptype); //sky + if (active_v4 == false) + { + handle_route_add_evt(data->iptype); //sky + } } #ifdef FEATURE_IPA_ANDROID #ifdef FEATURE_IPACM_HAL @@ -789,7 +792,10 @@ void IPACM_Wan::event_callback(ipa_cm_event_id event, void *param) /* Check & construct STA header */ handle_sta_header_add_evt(); #endif - handle_route_add_evt(data->iptype); + if (active_v6 == false) + { + handle_route_add_evt(data->iptype); + } } #ifdef FEATURE_IPA_ANDROID #ifdef FEATURE_IPACM_HAL @@ -1613,8 +1619,11 @@ int IPACM_Wan::handle_route_add_evt(ipa_ip_type iptype) { IPACM_Wan::xlat_mux_id = 0; wanup_data->xlat_mux_id = 0; - wanup_data->mux_id = ext_prop->ext[0].mux_id; - IPACMDBG_H("No xlat configuratio:\n"); + if(m_is_sta_mode == Q6_WAN) + wanup_data->mux_id = ext_prop->ext[0].mux_id; + else + wanup_data->mux_id = 0; + IPACMDBG_H("No xlat configuration\n"); } evt_data.event = IPA_HANDLE_WAN_UP; evt_data.evt_data = (void *)wanup_data; |