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 */
#include <arpa/inet.h>
#include <cutils/log.h>
#include <log/log.h>
/* HIDL Includes */
#include <android/hardware/tetheroffload/control/1.0/ITetheringOffloadCallback.h>

View file

@ -39,7 +39,7 @@
#include <linux/netfilter/nfnetlink_compat.h>
/* External Includes */
#include <cutils/log.h>
#include <log/log.h>
#include <cstring>
#include <sys/socket.h>
#include <sys/types.h>
@ -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();

View file

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

View file

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

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
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

View file

@ -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

View file

@ -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;
}

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);
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;
}

View file

@ -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,

View file

@ -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);

View file

@ -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)
{