From ec070c751ef7c3e5d51e5be0d09594fe50eec88e Mon Sep 17 00:00:00 2001 From: Max Weffers Date: Wed, 27 May 2020 08:23:27 +0200 Subject: [PATCH] sdm660-common: Update data-ipa-cfg-mgr from LA.UM.8.2.r1-06600-sdm660.0 Change-Id: I0bb33f221bef6caac28b87d61201df8996f9a356 --- .../hal/src/CtUpdateAmbassador.cpp | 2 +- data-ipa-cfg-mgr/hal/src/HAL.cpp | 4 +- data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp | 2 +- data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp | 2 +- data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h | 2 + data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h | 4 +- data-ipa-cfg-mgr/ipacm/src/Android.mk | 9 +- .../ipacm/src/IPACM_Filtering.cpp | 46 +++++++--- data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp | 23 ++++- data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp | 9 +- data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp | 1 + data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp | 89 +++++++------------ 12 files changed, 110 insertions(+), 83 deletions(-) diff --git a/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp b/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp index eba6b930..b5e60e28 100644 --- a/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp +++ b/data-ipa-cfg-mgr/hal/src/CtUpdateAmbassador.cpp @@ -33,7 +33,7 @@ /* External Includes */ #include -#include +#include /* HIDL Includes */ #include diff --git a/data-ipa-cfg-mgr/hal/src/HAL.cpp b/data-ipa-cfg-mgr/hal/src/HAL.cpp index 3f1a41fe..2d8ff2fd 100644 --- a/data-ipa-cfg-mgr/hal/src/HAL.cpp +++ b/data-ipa-cfg-mgr/hal/src/HAL.cpp @@ -39,7 +39,7 @@ #include /* External Includes */ -#include +#include #include #include #include @@ -86,7 +86,7 @@ HAL::HAL(IOffloadManager* mgr) : mLogs("HAL Function Calls", 50) { mCbCt = nullptr; } /* HAL */ -void HAL::registerAsSystemService(const char* name) { +void HAL::registerAsSystemService(const char* name __unused) { status_t ret = 0; ret = IOffloadControl::registerAsService(); diff --git a/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp b/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp index 137092fb..484355a5 100644 --- a/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp +++ b/data-ipa-cfg-mgr/hal/src/IpaEventRelay.cpp @@ -28,7 +28,7 @@ */ #define LOG_TAG "IPAHALService/IpaEventRelay" /* External Includes */ -#include +#include /* HIDL Includes */ #include diff --git a/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp b/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp index f556e40c..50fa91ce 100644 --- a/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp +++ b/data-ipa-cfg-mgr/hal/src/LocalLogBuffer.cpp @@ -29,7 +29,7 @@ #define LOG_TAG "IPAHALService/dump" /* External Includes */ -#include +#include #include #include #include diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h index 428c21a4..66672355 100644 --- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h +++ b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Filtering.h @@ -48,6 +48,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #define IPA_PCIE_MODEM_RULE_ID_START 69 +#define IPA_PCIE_MODEM_RULE_ID_MAX 1000 class IPACM_Filtering { @@ -80,6 +81,7 @@ private: int fd; /* File descriptor of the IPA device node /dev/ipa */ int total_num_offload_rules; int pcie_modem_rule_id; + bool pcie_modem_rule_id_in_use[IPA_PCIE_MODEM_RULE_ID_MAX]; }; #endif //IPACM_FILTERING_H diff --git a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h index 4eb5547b..ad627835 100644 --- a/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h +++ b/data-ipa-cfg-mgr/ipacm/inc/IPACM_Wan.h @@ -1,5 +1,5 @@ /* -Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. +Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -53,7 +53,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV4 2 #ifdef FEATURE_IPA_ANDROID -#define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV6 7 +#define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV6 4 #define IPA_V2_NUM_TCP_WAN_FILTER_RULE_IPV6 3 #define IPA_V2_NUM_MULTICAST_WAN_FILTER_RULE_IPV6 3 #define IPA_V2_NUM_FRAG_WAN_FILTER_RULE_IPV6 1 diff --git a/data-ipa-cfg-mgr/ipacm/src/Android.mk b/data-ipa-cfg-mgr/ipacm/src/Android.mk index 58176b6b..d706932f 100644 --- a/data-ipa-cfg-mgr/ipacm/src/Android.mk +++ b/data-ipa-cfg-mgr/ipacm/src/Android.mk @@ -6,9 +6,15 @@ ifneq ($(TARGET_USES_QMAA_OVERRIDE_DATA),true) endif #TARGET_USES_QMAA_OVERRIDE_DATA endif #TARGET_USES_QMAA +BOARD_IPA_LOW_RAM_EXCP_LIST := bengal + +ifeq ($(TARGET_HAS_LOW_RAM),true) +ifneq ($(call is-board-platform-in-list,$(BOARD_IPA_LOW_RAM_EXCP_LIST)),true) + TARGET_DISABLE_IPACM := true +endif +endif ifneq ($(TARGET_DISABLE_IPACM),true) -ifneq ($(TARGET_HAS_LOW_RAM),true) BOARD_PLATFORM_LIST := msm8909 BOARD_PLATFORM_LIST += msm8916 BOARD_PLATFORM_LIST += msm8917 @@ -151,4 +157,3 @@ endif # $(TARGET_ARCH) endif endif endif -endif diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp index a158d74c..217f3102 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Filtering.cpp @@ -59,6 +59,7 @@ IPACM_Filtering::IPACM_Filtering() } total_num_offload_rules = 0; pcie_modem_rule_id = 0; + memset(pcie_modem_rule_id_in_use, 0, sizeof(pcie_modem_rule_id_in_use)); } IPACM_Filtering::~IPACM_Filtering() @@ -702,7 +703,7 @@ bool IPACM_Filtering::AddWanDLFilteringRule(struct ipa_ioc_add_flt_rule const *r bool IPACM_Filtering::AddOffloadFilteringRule(struct ipa_ioc_add_flt_rule *flt_rule_tbl, uint8_t mux_id, uint8_t default_path) { #ifdef WAN_IOCTL_ADD_OFFLOAD_CONNECTION - int ret = 0, cnt, pos = 0; + int ret = 0, cnt, pos = 0, i; ipa_add_offload_connection_req_msg_v01 qmi_add_msg; int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR); if(fd_wwan_ioctl < 0) @@ -799,7 +800,23 @@ bool IPACM_Filtering::AddOffloadFilteringRule(struct ipa_ioc_add_flt_rule *flt_r sizeof(struct ipa_filter_rule_type_v01)); IPACMDBG_H("mux-id %d, hashable %d\n", qmi_add_msg.filter_spec_ex2_list[pos].mux_id, qmi_add_msg.filter_spec_ex2_list[pos].is_rule_hashable); pos++; - pcie_modem_rule_id = (pcie_modem_rule_id + 1)%100; + pcie_modem_rule_id_in_use[pcie_modem_rule_id] = true; + for(i = 0; i < IPA_PCIE_MODEM_RULE_ID_MAX; i++) + { + pcie_modem_rule_id = (pcie_modem_rule_id + 1)%IPA_PCIE_MODEM_RULE_ID_MAX; + if(!pcie_modem_rule_id_in_use[pcie_modem_rule_id]) + break; + } + + if(i == IPA_PCIE_MODEM_RULE_ID_MAX) + { + IPACMERR("all handles are in use, max = %d\n", i); + return false; + } + else + { + IPACMDBG("next free pcie_modem_rule_id: %d\n", pcie_modem_rule_id); + } } else { @@ -884,6 +901,12 @@ bool IPACM_Filtering::DelOffloadFilteringRule(struct ipa_ioc_del_flt_rule const /* passing rule-id to wan-driver */ qmi_del_msg.filter_handle_list[pos].filter_spec_identifier = flt_rule_tbl->hdl[cnt].hdl; pos++; + + /* set in use to false for future rule additions (need to subtract offset and mod max index) */ + pcie_modem_rule_id_in_use[(IPA_PCIE_MODEM_RULE_ID_MAX + flt_rule_tbl->hdl[cnt].hdl - IPA_PCIE_MODEM_RULE_ID_START) + % IPA_PCIE_MODEM_RULE_ID_MAX] = false; + IPACMDBG("freeing pcie_modem_rule_id: %d\n", (IPA_PCIE_MODEM_RULE_ID_MAX + flt_rule_tbl->hdl[cnt].hdl -IPA_PCIE_MODEM_RULE_ID_START) + % IPA_PCIE_MODEM_RULE_ID_MAX); } else { @@ -975,17 +998,18 @@ bool IPACM_Filtering::ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTabl } ret = ioctl(fd, IPA_IOC_MDFY_FLT_RULE, ruleTable); + + for (i = 0; i < ruleTable->num_rules; i++) + { + if (ruleTable->rules[i].status != 0) + { + IPACMERR("Modifying filter rule %d failed\n", i); + } + } + if (ret != 0) { - IPACMERR("Failed modifying filtering rule %pK\n", ruleTable); - - for (i = 0; i < ruleTable->num_rules; i++) - { - if (ruleTable->rules[i].status != 0) - { - IPACMERR("Modifying filter rule %d failed\n", i); - } - } + IPACMERR("Failed modifying filtering rule IOCTL for %pK\n", ruleTable); return false; } diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp index 7628f79e..5e1c4ff6 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Lan.cpp @@ -4195,9 +4195,14 @@ int IPACM_Lan::handle_private_subnet_android(ipa_ip_type iptype) mtu[i] = IPACM_Wan::queryMTU(ipa_if_num, IPA_IP_v4); if (mtu[i] > 0) + { mtu_rule_cnt++; + IPACMDBG_H("MTU[%d] is %d\n", i, mtu[i]); + } else - IPACMDBG_H("MTU is zero\n"); + { + IPACMERR("MTU is 0"); + } } IPACMDBG_H("total %d MTU rules are needed\n", mtu_rule_cnt); @@ -4227,16 +4232,16 @@ int IPACM_Lan::handle_private_subnet_android(ipa_ip_type iptype) flt_rule.rule.retain_hdr = 1; flt_rule.rule.to_uc = 0; - flt_rule.rule.action = IPA_PASS_TO_ROUTING; - flt_rule.rule.eq_attrib_type = 0; - flt_rule.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_default_v4.hdl; IPACMDBG_H("Private filter rule use table: %s\n",IPACM_Iface::ipacmcfg->rt_tbl_default_v4.name); for (i = 0; i < (IPACM_Iface::ipacmcfg->ipa_num_private_subnet); i++) { /* add private subnet rule for ipv4 */ + /* these 3 properties below will be reset during construct_mtu_rule */ flt_rule.rule.action = IPA_PASS_TO_ROUTING; flt_rule.rule.eq_attrib_type = 0; + flt_rule.rule.rt_tbl_hdl = IPACM_Iface::ipacmcfg->rt_tbl_default_v4.hdl; + flt_rule.rule_hdl = private_fl_rule_hdl[i]; memcpy(&flt_rule.rule.attrib, &rx_prop->rx[0].attrib, sizeof(flt_rule.rule.attrib)); flt_rule.rule.attrib.attrib_mask |= IPA_FLT_DST_ADDR; @@ -4254,7 +4259,9 @@ int IPACM_Lan::handle_private_subnet_android(ipa_ip_type iptype) flt_rule.rule.attrib.u.v4.src_addr = IPACM_Iface::ipacmcfg->private_subnet_table[i].subnet_addr; flt_rule.rule.attrib.attrib_mask |= IPA_FLT_SRC_ADDR; if (construct_mtu_rule(&flt_rule.rule, IPA_IP_v4, mtu[i])) + { IPACMERR("Failed to modify MTU filtering rule.\n"); + } memcpy(&(pFilteringTable->rules[mtu_rule_idx + i]), &flt_rule, sizeof(struct ipa_flt_rule_mdfy)); IPACMDBG_H("Adding MTU rule for private subnet 0x%x.\n", flt_rule.rule.attrib.u.v4.src_addr); } @@ -4292,7 +4299,14 @@ int IPACM_Lan::install_ipv6_prefix_flt_rule(uint32_t* prefix) uint16_t mtu = IPACM_Wan::queryMTU(ipa_if_num, IPA_IP_v6); if (mtu > 0) + { + IPACMDBG_H("MTU is %d\n", mtu); rule_cnt ++; + } + else + { + IPACMERR("MTU is 0"); + } if(rx_prop != NULL) { @@ -6023,6 +6037,7 @@ int IPACM_Lan::add_l2tp_flt_rule(ipa_ip_type iptype, uint8_t *dst_mac, uint32_t if(m_routing.GetRoutingTable(&rt_tbl) == false) { IPACMERR("Failed to get routing table.\n"); + free(pFilteringTable); return IPACM_FAILURE; } diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp index afdf26da..bb5d6c40 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Main.cpp @@ -450,11 +450,12 @@ void* ipa_driver_msg_notifier(void *param) } memcpy(event_ex, buffer + sizeof(struct ipa_msg_meta), length); data_ex = (ipacm_event_data_wlan_ex *)malloc(sizeof(ipacm_event_data_wlan_ex) + event_ex_o.num_of_attribs * sizeof(ipa_wlan_hdr_attrib_val)); - if (data_ex == NULL) - { + if (data_ex == NULL) + { IPACMERR("unable to allocate memory for event data\n"); - return NULL; - } + free(event_ex); + return NULL; + } data_ex->num_of_attribs = event_ex->num_of_attribs; memcpy(data_ex->attribs, diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp index fa4b8b77..fa0f7acb 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Netlink.cpp @@ -709,6 +709,7 @@ static int ipa_nl_decode_nlmsg if(ret_val != IPACM_SUCCESS) { IPACMERR("Error while getting interface name\n"); + free(data_fid); return IPACM_FAILURE; } IPACMDBG_H("Got a usb link_up event (Interface %s, %d) \n", dev_name, msg_ptr->nl_link_info.metainfo.ifi_index); diff --git a/data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp b/data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp index 6e7c9613..1828910f 100644 --- a/data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp +++ b/data-ipa-cfg-mgr/ipacm/src/IPACM_Wan.cpp @@ -5166,17 +5166,6 @@ int IPACM_Wan::handle_down_evt() handle_route_del_evt(IPA_IP_v4); IPACMDBG_H("Delete default v4 routing rules\n"); - if(m_is_sta_mode == Q6_MHI_WAN) - { - /* Delete default v4 RT rule */ - IPACMDBG_H("Delete default v4 routing rules\n"); - if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[0], IPA_IP_v4) == false) - { - IPACMERR("Routing v6-lan-RT rule deletion failed!\n"); - res = IPACM_FAILURE; - goto fail; - } - } #ifdef FEATURE_IPA_ANDROID /* posting wan_down_tether for lan clients */ @@ -5208,18 +5197,6 @@ int IPACM_Wan::handle_down_evt() handle_route_del_evt(IPA_IP_v6); IPACMDBG_H("Delete default v6 routing rules\n"); - if(m_is_sta_mode == Q6_MHI_WAN) - { - /* Delete default v6 RT rule */ - IPACMDBG_H("Delete default v6 routing rules\n"); - if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[1], IPA_IP_v6) == false) - { - IPACMERR("Routing v6-wan-RT rule deletion failed!\n"); - res = IPACM_FAILURE; - goto fail; - } - } - #ifdef FEATURE_IPA_ANDROID /* posting wan_down_tether for lan clients */ #ifdef FEATURE_IPACM_HAL @@ -5241,37 +5218,51 @@ int IPACM_Wan::handle_down_evt() #endif } - if(m_is_sta_mode != Q6_MHI_WAN) + /* Delete default v4 RT rule */ + if (ip_type != IPA_IP_v6 && wan_v4_addr_set) { - /* Delete default v4 RT rule */ - if (ip_type != IPA_IP_v6) + /* no need delete v4 RSC routing rules */ + IPACMDBG_H("Delete default v4 routing rules\n"); + if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[0], IPA_IP_v4) == false) { - /* no need delete v4 RSC routing rules */ - IPACMDBG_H("Delete default v4 routing rules\n"); - if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[0], IPA_IP_v4) == false) + IPACMERR("Routing rule deletion failed!\n"); + res = IPACM_FAILURE; + goto fail; + } + } + + /* delete default v6 RT rule */ + if (ip_type != IPA_IP_v4) + { + IPACMDBG_H("Delete default v6 routing rules\n"); + /* May have multiple ipv6 iface-routing rules*/ + for (i = 0; i < 2*num_dft_rt_v6; i++) + { + if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+i], IPA_IP_v6) == false) { IPACMERR("Routing rule deletion failed!\n"); res = IPACM_FAILURE; goto fail; } } + IPACMDBG_H("finished delete default v6 RT rules\n "); + } - /* delete default v6 RT rule */ - if (ip_type != IPA_IP_v4) + /* check software routing fl rule hdl */ + if (softwarerouting_act == true) + { + if(m_is_sta_mode == Q6_MHI_WAN) { - IPACMDBG_H("Delete default v6 routing rules\n"); - /* May have multiple ipv6 iface-routing rules*/ - for (i = 0; i < 2*num_dft_rt_v6; i++) - { - if (m_routing.DeleteRoutingHdl(dft_rt_rule_hdl[MAX_DEFAULT_v4_ROUTE_RULES+i], IPA_IP_v6) == false) - { - IPACMERR("Routing rule deletion failed!\n"); - res = IPACM_FAILURE; - goto fail; - } - } - IPACMDBG_H("finished delete default v6 RT rules\n "); + handle_software_routing_disable(true); } + else + { + handle_software_routing_disable(false); + } + } + + if(m_is_sta_mode != Q6_MHI_WAN) + { /* clean wan-client header, routing rules */ IPACMDBG_H("left %d wan clients need to be deleted \n ", num_wan_client); for (i = 0; i < num_wan_client; i++) @@ -5320,18 +5311,6 @@ int IPACM_Wan::handle_down_evt() /* free the edm clients cache */ IPACMDBG_H("Free wan clients cache\n"); - /* check software routing fl rule hdl */ - if (softwarerouting_act == true) - { - if(m_is_sta_mode == Q6_MHI_WAN) - { - handle_software_routing_disable(true); - } - else - { - handle_software_routing_disable(false); - } - } /* free dft ipv4 filter rule handlers if any */ if (ip_type != IPA_IP_v6 && rx_prop != NULL) {