sdm660-common: Update data-ipa-cfg-mgr from LA.UM.8.2.r1-06600-sdm660.0

Change-Id: I0bb33f221bef6caac28b87d61201df8996f9a356
This commit is contained in:
Max Weffers 2020-05-27 08:23:27 +02:00 committed by OdSazib
parent e7f3124172
commit ec070c751e
No known key found for this signature in database
GPG key ID: CB336514F9F5CF69
12 changed files with 110 additions and 83 deletions

View file

@ -33,7 +33,7 @@
/* External Includes */ /* External Includes */
#include <arpa/inet.h> #include <arpa/inet.h>
#include <cutils/log.h> #include <log/log.h>
/* HIDL Includes */ /* HIDL Includes */
#include <android/hardware/tetheroffload/control/1.0/ITetheringOffloadCallback.h> #include <android/hardware/tetheroffload/control/1.0/ITetheringOffloadCallback.h>

View file

@ -39,7 +39,7 @@
#include <linux/netfilter/nfnetlink_compat.h> #include <linux/netfilter/nfnetlink_compat.h>
/* External Includes */ /* External Includes */
#include <cutils/log.h> #include <log/log.h>
#include <cstring> #include <cstring>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/types.h> #include <sys/types.h>
@ -86,7 +86,7 @@ HAL::HAL(IOffloadManager* mgr) : mLogs("HAL Function Calls", 50) {
mCbCt = nullptr; mCbCt = nullptr;
} /* HAL */ } /* HAL */
void HAL::registerAsSystemService(const char* name) { void HAL::registerAsSystemService(const char* name __unused) {
status_t ret = 0; status_t ret = 0;
ret = IOffloadControl::registerAsService(); ret = IOffloadControl::registerAsService();

View file

@ -28,7 +28,7 @@
*/ */
#define LOG_TAG "IPAHALService/IpaEventRelay" #define LOG_TAG "IPAHALService/IpaEventRelay"
/* External Includes */ /* External Includes */
#include <cutils/log.h> #include <log/log.h>
/* HIDL Includes */ /* HIDL Includes */
#include <android/hardware/tetheroffload/control/1.0/ITetheringOffloadCallback.h> #include <android/hardware/tetheroffload/control/1.0/ITetheringOffloadCallback.h>

View file

@ -29,7 +29,7 @@
#define LOG_TAG "IPAHALService/dump" #define LOG_TAG "IPAHALService/dump"
/* External Includes */ /* External Includes */
#include <cutils/log.h> #include <log/log.h>
#include <deque> #include <deque>
#include <string> #include <string>
#include <sys/types.h> #include <sys/types.h>

View file

@ -48,6 +48,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <linux/rmnet_ipa_fd_ioctl.h> #include <linux/rmnet_ipa_fd_ioctl.h>
#define IPA_PCIE_MODEM_RULE_ID_START 69 #define IPA_PCIE_MODEM_RULE_ID_START 69
#define IPA_PCIE_MODEM_RULE_ID_MAX 1000
class IPACM_Filtering class IPACM_Filtering
{ {
@ -80,6 +81,7 @@ private:
int fd; /* File descriptor of the IPA device node /dev/ipa */ int fd; /* File descriptor of the IPA device node /dev/ipa */
int total_num_offload_rules; int total_num_offload_rules;
int pcie_modem_rule_id; int pcie_modem_rule_id;
bool pcie_modem_rule_id_in_use[IPA_PCIE_MODEM_RULE_ID_MAX];
}; };
#endif //IPACM_FILTERING_H #endif //IPACM_FILTERING_H

View file

@ -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 Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are 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 #define IPA_V2_NUM_DEFAULT_WAN_FILTER_RULE_IPV4 2
#ifdef FEATURE_IPA_ANDROID #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_TCP_WAN_FILTER_RULE_IPV6 3
#define IPA_V2_NUM_MULTICAST_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 #define IPA_V2_NUM_FRAG_WAN_FILTER_RULE_IPV6 1

View file

@ -6,9 +6,15 @@ ifneq ($(TARGET_USES_QMAA_OVERRIDE_DATA),true)
endif #TARGET_USES_QMAA_OVERRIDE_DATA endif #TARGET_USES_QMAA_OVERRIDE_DATA
endif #TARGET_USES_QMAA 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_DISABLE_IPACM),true)
ifneq ($(TARGET_HAS_LOW_RAM),true)
BOARD_PLATFORM_LIST := msm8909 BOARD_PLATFORM_LIST := msm8909
BOARD_PLATFORM_LIST += msm8916 BOARD_PLATFORM_LIST += msm8916
BOARD_PLATFORM_LIST += msm8917 BOARD_PLATFORM_LIST += msm8917
@ -151,4 +157,3 @@ endif # $(TARGET_ARCH)
endif endif
endif endif
endif endif
endif

View file

@ -59,6 +59,7 @@ IPACM_Filtering::IPACM_Filtering()
} }
total_num_offload_rules = 0; total_num_offload_rules = 0;
pcie_modem_rule_id = 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() 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) 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 #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; ipa_add_offload_connection_req_msg_v01 qmi_add_msg;
int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR); int fd_wwan_ioctl = open(WWAN_QMI_IOCTL_DEVICE_NAME, O_RDWR);
if(fd_wwan_ioctl < 0) 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)); 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); 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++; 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 else
{ {
@ -884,6 +901,12 @@ bool IPACM_Filtering::DelOffloadFilteringRule(struct ipa_ioc_del_flt_rule const
/* passing rule-id to wan-driver */ /* passing rule-id to wan-driver */
qmi_del_msg.filter_handle_list[pos].filter_spec_identifier = flt_rule_tbl->hdl[cnt].hdl; qmi_del_msg.filter_handle_list[pos].filter_spec_identifier = flt_rule_tbl->hdl[cnt].hdl;
pos++; 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 else
{ {
@ -975,9 +998,6 @@ bool IPACM_Filtering::ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTabl
} }
ret = ioctl(fd, IPA_IOC_MDFY_FLT_RULE, ruleTable); ret = ioctl(fd, IPA_IOC_MDFY_FLT_RULE, ruleTable);
if (ret != 0)
{
IPACMERR("Failed modifying filtering rule %pK\n", ruleTable);
for (i = 0; i < ruleTable->num_rules; i++) for (i = 0; i < ruleTable->num_rules; i++)
{ {
@ -986,6 +1006,10 @@ bool IPACM_Filtering::ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTabl
IPACMERR("Modifying filter rule %d failed\n", i); IPACMERR("Modifying filter rule %d failed\n", i);
} }
} }
if (ret != 0)
{
IPACMERR("Failed modifying filtering rule IOCTL for %pK\n", ruleTable);
return false; return false;
} }

View file

@ -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); mtu[i] = IPACM_Wan::queryMTU(ipa_if_num, IPA_IP_v4);
if (mtu[i] > 0) if (mtu[i] > 0)
{
mtu_rule_cnt++; mtu_rule_cnt++;
IPACMDBG_H("MTU[%d] is %d\n", i, mtu[i]);
}
else else
IPACMDBG_H("MTU is zero\n"); {
IPACMERR("MTU is 0");
}
} }
IPACMDBG_H("total %d MTU rules are needed\n", mtu_rule_cnt); 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.retain_hdr = 1;
flt_rule.rule.to_uc = 0; 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); 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++) for (i = 0; i < (IPACM_Iface::ipacmcfg->ipa_num_private_subnet); i++)
{ {
/* add private subnet rule for ipv4 */ /* 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.action = IPA_PASS_TO_ROUTING;
flt_rule.rule.eq_attrib_type = 0; 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]; flt_rule.rule_hdl = private_fl_rule_hdl[i];
memcpy(&flt_rule.rule.attrib, &rx_prop->rx[0].attrib, sizeof(flt_rule.rule.attrib)); 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; 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.u.v4.src_addr = IPACM_Iface::ipacmcfg->private_subnet_table[i].subnet_addr;
flt_rule.rule.attrib.attrib_mask |= IPA_FLT_SRC_ADDR; flt_rule.rule.attrib.attrib_mask |= IPA_FLT_SRC_ADDR;
if (construct_mtu_rule(&flt_rule.rule, IPA_IP_v4, mtu[i])) if (construct_mtu_rule(&flt_rule.rule, IPA_IP_v4, mtu[i]))
{
IPACMERR("Failed to modify MTU filtering rule.\n"); IPACMERR("Failed to modify MTU filtering rule.\n");
}
memcpy(&(pFilteringTable->rules[mtu_rule_idx + i]), &flt_rule, sizeof(struct ipa_flt_rule_mdfy)); 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); 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); uint16_t mtu = IPACM_Wan::queryMTU(ipa_if_num, IPA_IP_v6);
if (mtu > 0) if (mtu > 0)
{
IPACMDBG_H("MTU is %d\n", mtu);
rule_cnt ++; rule_cnt ++;
}
else
{
IPACMERR("MTU is 0");
}
if(rx_prop != NULL) 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) if(m_routing.GetRoutingTable(&rt_tbl) == false)
{ {
IPACMERR("Failed to get routing table.\n"); IPACMERR("Failed to get routing table.\n");
free(pFilteringTable);
return IPACM_FAILURE; return IPACM_FAILURE;
} }

View file

@ -453,6 +453,7 @@ void* ipa_driver_msg_notifier(void *param)
if (data_ex == NULL) if (data_ex == NULL)
{ {
IPACMERR("unable to allocate memory for event data\n"); IPACMERR("unable to allocate memory for event data\n");
free(event_ex);
return NULL; return NULL;
} }
data_ex->num_of_attribs = event_ex->num_of_attribs; data_ex->num_of_attribs = event_ex->num_of_attribs;

View file

@ -709,6 +709,7 @@ static int ipa_nl_decode_nlmsg
if(ret_val != IPACM_SUCCESS) if(ret_val != IPACM_SUCCESS)
{ {
IPACMERR("Error while getting interface name\n"); IPACMERR("Error while getting interface name\n");
free(data_fid);
return IPACM_FAILURE; 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); IPACMDBG_H("Got a usb link_up event (Interface %s, %d) \n", dev_name, msg_ptr->nl_link_info.metainfo.ifi_index);

View file

@ -5166,17 +5166,6 @@ int IPACM_Wan::handle_down_evt()
handle_route_del_evt(IPA_IP_v4); handle_route_del_evt(IPA_IP_v4);
IPACMDBG_H("Delete default v4 routing rules\n"); 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 #ifdef FEATURE_IPA_ANDROID
/* posting wan_down_tether for lan clients */ /* posting wan_down_tether for lan clients */
@ -5208,18 +5197,6 @@ int IPACM_Wan::handle_down_evt()
handle_route_del_evt(IPA_IP_v6); handle_route_del_evt(IPA_IP_v6);
IPACMDBG_H("Delete default v6 routing rules\n"); 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 #ifdef FEATURE_IPA_ANDROID
/* posting wan_down_tether for lan clients */ /* posting wan_down_tether for lan clients */
#ifdef FEATURE_IPACM_HAL #ifdef FEATURE_IPACM_HAL
@ -5241,10 +5218,8 @@ int IPACM_Wan::handle_down_evt()
#endif #endif
} }
if(m_is_sta_mode != Q6_MHI_WAN)
{
/* Delete default v4 RT rule */ /* Delete default v4 RT rule */
if (ip_type != IPA_IP_v6) if (ip_type != IPA_IP_v6 && wan_v4_addr_set)
{ {
/* no need delete v4 RSC routing rules */ /* no need delete v4 RSC routing rules */
IPACMDBG_H("Delete default v4 routing rules\n"); IPACMDBG_H("Delete default v4 routing rules\n");
@ -5272,6 +5247,22 @@ int IPACM_Wan::handle_down_evt()
} }
IPACMDBG_H("finished delete default v6 RT rules\n "); IPACMDBG_H("finished delete default v6 RT rules\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);
}
}
if(m_is_sta_mode != Q6_MHI_WAN)
{
/* clean wan-client header, routing rules */ /* clean wan-client header, routing rules */
IPACMDBG_H("left %d wan clients need to be deleted \n ", num_wan_client); IPACMDBG_H("left %d wan clients need to be deleted \n ", num_wan_client);
for (i = 0; i < num_wan_client; i++) for (i = 0; i < num_wan_client; i++)
@ -5320,18 +5311,6 @@ int IPACM_Wan::handle_down_evt()
/* free the edm clients cache */ /* free the edm clients cache */
IPACMDBG_H("Free wan clients cache\n"); 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 */ /* free dft ipv4 filter rule handlers if any */
if (ip_type != IPA_IP_v6 && rx_prop != NULL) if (ip_type != IPA_IP_v6 && rx_prop != NULL)
{ {