sdm660-common: Update data-ipa-cfg-mgr from LA.UM.8.2.r1-06600-sdm660.0
Change-Id: I0bb33f221bef6caac28b87d61201df8996f9a356
This commit is contained in:
parent
e7f3124172
commit
ec070c751e
12 changed files with 110 additions and 83 deletions
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue