summaryrefslogtreecommitdiff
path: root/ipacm/inc
diff options
context:
space:
mode:
authorChengYou Ho <chengyouho@google.com>2019-12-23 16:59:59 +0800
committerWilson Sung <wilsonsung@google.com>2020-02-03 13:33:21 +0800
commitdc455fa6e93bcb5a252747bed3941759ce247c38 (patch)
treea889a4367664513ff539f6556fe7aa9857ec2079 /ipacm/inc
parent6bafc1497f181945305cba34f8b2f2ddac35b650 (diff)
parent3ba31701681587a2aba85ad4fed3b0d48e265fd0 (diff)
downloadipacfg-mgr-dc455fa6e93bcb5a252747bed3941759ce247c38.tar.gz
Merge remote-tracking branch 'goog/qcom/release/LA.UM.8.1.C9.09.00.00.518.343'
Bug: 146759211 Change-Id: I7e90b1f60353762b17bf0d1f5583767644cea12f
Diffstat (limited to 'ipacm/inc')
-rw-r--r--ipacm/inc/IPACM_Config.h5
-rw-r--r--ipacm/inc/IPACM_ConntrackListener.h4
-rw-r--r--ipacm/inc/IPACM_Conntrack_NATApp.h12
-rw-r--r--ipacm/inc/IPACM_Defs.h21
-rw-r--r--ipacm/inc/IPACM_Filtering.h12
-rw-r--r--ipacm/inc/IPACM_Iface.h10
-rw-r--r--ipacm/inc/IPACM_Lan.h23
-rw-r--r--ipacm/inc/IPACM_OffloadManager.h4
-rw-r--r--ipacm/inc/IPACM_Routing.h4
-rw-r--r--ipacm/inc/IPACM_Wan.h91
-rw-r--r--ipacm/inc/IPACM_Wlan.h20
11 files changed, 180 insertions, 26 deletions
diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h
index af1b616..9230f7d 100644
--- a/ipacm/inc/IPACM_Config.h
+++ b/ipacm/inc/IPACM_Config.h
@@ -147,6 +147,11 @@ public:
bool isMCC_Mode;
+ /* IPA_HW_FNR_STATS */
+ bool hw_fnr_stats_support;
+ int hw_counter_offset;
+ int sw_counter_offset;
+
/* To return the instance */
static IPACM_Config* GetInstance();
diff --git a/ipacm/inc/IPACM_ConntrackListener.h b/ipacm/inc/IPACM_ConntrackListener.h
index d965cf7..24a2c72 100644
--- a/ipacm/inc/IPACM_ConntrackListener.h
+++ b/ipacm/inc/IPACM_ConntrackListener.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019, 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
@@ -103,7 +103,7 @@ private:
public:
char wan_ifname[IPA_IFACE_NAME_LEN];
uint32_t wan_ipaddr;
- bool isStaMode;
+ ipacm_wan_iface_type backhaul_mode;
IPACM_ConntrackListener();
void event_callback(ipa_cm_event_id, void *data);
inline bool isWanUp()
diff --git a/ipacm/inc/IPACM_Conntrack_NATApp.h b/ipacm/inc/IPACM_Conntrack_NATApp.h
index c3749e1..b362907 100644
--- a/ipacm/inc/IPACM_Conntrack_NATApp.h
+++ b/ipacm/inc/IPACM_Conntrack_NATApp.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019, 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
@@ -65,6 +65,8 @@ typedef struct _nat_table_entry
bool enabled;
uint32_t rule_hdl;
+ /* used for pcie-modem */
+ uint32_t rule_id;
}nat_table_entry;
#define CHK_TBL_HDL() if(nat_table_hdl == 0){ return -1; }
@@ -80,6 +82,8 @@ private:
uint32_t pub_ip_addr;
uint32_t pub_ip_addr_pre;
uint32_t nat_table_hdl;
+ /* used for pcie-modem */
+ uint8_t pub_mux_id;
int curCnt, max_entries;
@@ -94,7 +98,10 @@ private:
struct nf_conntrack *ct;
struct nfct_handle *ct_hdl;
+ int m_fd_ipa;
+
NatApp();
+ ~NatApp();
int Init();
void UpdateCTUdpTs(nat_table_entry *, uint32_t);
@@ -114,6 +121,9 @@ public:
int AddEntry(const nat_table_entry *);
int DeleteEntry(const nat_table_entry *);
+ int AddConnection(const nat_table_entry *);
+ int DelConnection(const uint32_t);
+
void UpdateUDPTimeStamp();
int UpdatePwrSaveIf(uint32_t);
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index d2186b6..65d5ce4 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -122,6 +122,7 @@ extern "C"
#define IPA_MAX_NUM_ETH_CLIENTS 15
#define IPA_MAX_NUM_AMPDU_RULE 15
#define IPA_MAC_ADDR_SIZE 6
+#define IPA_MAX_NUM_SW_PDNS 15
/*===========================================================================
GLOBAL DEFINITIONS AND DECLARATIONS
@@ -186,7 +187,8 @@ typedef enum
IPA_ETH_BRIDGE_CLIENT_ADD, /* ipacm_event_eth_bridge */
IPA_ETH_BRIDGE_CLIENT_DEL, /* ipacm_event_eth_bridge*/
IPA_ETH_BRIDGE_WLAN_SCC_MCC_SWITCH, /* ipacm_event_eth_bridge*/
- IPA_SSR_NOTICE, /* NULL*/
+ IPA_SSR_NOTICE, /* NULL*/
+ IPA_COALESCE_NOTICE, /* NULL*/
#ifdef FEATURE_L2TP
IPA_ADD_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */
IPA_DEL_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */
@@ -352,31 +354,34 @@ typedef struct
struct ipa_wlan_hdr_attrib_val attribs[0];
} ipacm_event_data_wlan_ex;
+typedef enum
+{
+ Q6_WAN = 0,
+ WLAN_WAN,
+ ECM_WAN,
+ Q6_MHI_WAN
+} ipacm_wan_iface_type;
+
typedef struct _ipacm_event_iface_up
{
+ ipacm_wan_iface_type backhaul_type;
char ifname[IPA_IFACE_NAME_LEN];
uint32_t ipv4_addr;
uint32_t addr_mask;
uint32_t ipv6_prefix[2];
- bool is_sta;
uint8_t xlat_mux_id;
uint8_t mux_id;
}ipacm_event_iface_up;
typedef struct _ipacm_event_iface_up_tether
{
+ ipacm_wan_iface_type backhaul_type;
uint32_t if_index_tether;
uint32_t ipv6_prefix[2];
bool is_sta;
uint8_t xlat_mux_id;
}ipacm_event_iface_up_tehter;
-typedef enum
-{
- Q6_WAN = 0,
- WLAN_WAN,
- ECM_WAN
-} ipacm_wan_iface_type;
typedef struct _ipacm_ifacemgr_data
{
diff --git a/ipacm/inc/IPACM_Filtering.h b/ipacm/inc/IPACM_Filtering.h
index 9bb8247..428c21a 100644
--- a/ipacm/inc/IPACM_Filtering.h
+++ b/ipacm/inc/IPACM_Filtering.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019, 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
@@ -47,6 +47,8 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <IPACM_Defs.h>
#include <linux/rmnet_ipa_fd_ioctl.h>
+#define IPA_PCIE_MODEM_RULE_ID_START 69
+
class IPACM_Filtering
{
public:
@@ -54,6 +56,10 @@ public:
~IPACM_Filtering();
bool AddFilteringRule(struct ipa_ioc_add_flt_rule const *ruleTable);
bool AddFilteringRuleAfter(struct ipa_ioc_add_flt_rule_after const *ruleTable);
+#ifdef IPA_IOCTL_SET_FNR_COUNTER_INFO
+ bool AddFilteringRule_hw_index(struct ipa_ioc_add_flt_rule *ruleTable, int hw_counter_index);
+ bool AddFilteringRuleAfter_hw_index(struct ipa_ioc_add_flt_rule_after *ruleTable, int hw_counter_index);
+#endif //IPA_IOCTL_SET_FNR_COUNTER_INFO
bool DeleteFilteringRule(struct ipa_ioc_del_flt_rule *ruleTable);
bool Commit(enum ipa_ip_type ip);
bool Reset(enum ipa_ip_type ip);
@@ -63,6 +69,8 @@ public:
uint8_t num_rules);
bool AddWanDLFilteringRule(struct ipa_ioc_add_flt_rule const *rule_table_v4, struct ipa_ioc_add_flt_rule const * rule_table_v6, uint8_t mux_id);
+ bool AddOffloadFilteringRule(struct ipa_ioc_add_flt_rule *flt_rule_tbl, uint8_t mux_id, uint8_t default_path);
+ bool DelOffloadFilteringRule(struct ipa_ioc_del_flt_rule const *flt_rule_tbl);
bool SendFilteringRuleIndex(struct ipa_fltr_installed_notif_req_msg_v01* table);
bool ModifyFilteringRule(struct ipa_ioc_mdfy_flt_rule* ruleTable);
ipa_filter_action_enum_v01 GetQmiFilterAction(ipa_flt_action action);
@@ -70,6 +78,8 @@ public:
private:
static const char *DEVICE_NAME;
int fd; /* File descriptor of the IPA device node /dev/ipa */
+ int total_num_offload_rules;
+ int pcie_modem_rule_id;
};
#endif //IPACM_FILTERING_H
diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h
index a562613..55d9e99 100644
--- a/ipacm/inc/IPACM_Iface.h
+++ b/ipacm/inc/IPACM_Iface.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
+Copyright (c) 2013-2019, 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
@@ -139,13 +139,17 @@ public:
static IPACM_Filtering m_filtering;
static IPACM_Header m_header;
+ void change_to_network_order(ipa_ip_type iptype, ipa_rule_attrib* attrib);
+
/* software routing enable */
- virtual int handle_software_routing_enable(void);
+ virtual int handle_software_routing_enable(bool mhip);
/* software routing disable */
- virtual int handle_software_routing_disable(void);
+ virtual int handle_software_routing_disable(bool mhip);
void delete_iface(void);
+ bool is_global_ipv6_addr(uint32_t* ipv6_addr);
+
private:
static const char *DEVICE_NAME;
diff --git a/ipacm/inc/IPACM_Lan.h b/ipacm/inc/IPACM_Lan.h
index 700dfbc..bf815c5 100644
--- a/ipacm/inc/IPACM_Lan.h
+++ b/ipacm/inc/IPACM_Lan.h
@@ -49,6 +49,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "IPACM_Filtering.h"
#include "IPACM_Config.h"
#include "IPACM_Conntrack_NATApp.h"
+#include "IPACM_Wan.h"
#define IPA_WAN_DEFAULT_FILTER_RULE_HANDLES 1
#define IPA_PRIV_SUBNET_FILTER_RULE_HANDLES 3
@@ -94,6 +95,8 @@ typedef struct _ipa_eth_client
int ipv6_set;
bool ipv4_header_set;
bool ipv6_header_set;
+ /* used for pcie-modem */
+ uint32_t v6_rt_rule_id[IPV6_NUM_ADDR];
eth_client_rt_hdl eth_rt_hdl[0]; /* depends on number of tx properties */
}ipa_eth_client;
@@ -121,10 +124,10 @@ public:
virtual int handle_wan_up_ex(ipacm_ext_prop* ext_prop, ipa_ip_type iptype, uint8_t xlat_mux_id);
/* delete filter rule for wan_down event*/
- virtual int handle_wan_down(bool is_sta_mode);
+ virtual int handle_wan_down(ipacm_wan_iface_type backhaul_mode);
/* delete filter rule for wan_down event*/
- virtual int handle_wan_down_v6(bool is_sta_mode);
+ virtual int handle_wan_down_v6(ipacm_wan_iface_type backhaul_mode);
/* configure private subnet filter rules*/
virtual int handle_private_subnet(ipa_ip_type iptype);
@@ -393,6 +396,18 @@ private:
{
for(num_v6 =0;num_v6 < get_client_memptr(eth_client, clt_indx)->route_rule_set_v6;num_v6++)
{
+ /* send client-v6 delete to pcie modem only with global ipv6 with tx_index = 1 one time*/
+ if(is_global_ipv6_addr(get_client_memptr(eth_client, clt_indx)->v6_addr[num_v6]) && (IPACM_Wan::backhaul_mode == Q6_MHI_WAN)
+ && (get_client_memptr(eth_client, clt_indx)->v6_rt_rule_id[num_v6] > 0))
+ {
+ IPACMDBG_H("Delete client index %d ipv6 RT-rules for %d-st ipv6 for rule-id:%d\n", clt_indx,num_v6,
+ get_client_memptr(eth_client, clt_indx)->v6_rt_rule_id[num_v6]);
+ if (del_connection(clt_indx, num_v6))
+ {
+ IPACMERR("PCIE filter rule deletion failed! (%d-client) %d v6-entry\n",clt_indx, num_v6);
+ }
+ }
+
IPACMDBG_H("Delete client index %d ipv6 RT-rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
rt_hdl = get_client_memptr(eth_client, clt_indx)->eth_rt_hdl[tx_index].eth_rt_rule_hdl_v6[num_v6];
if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
@@ -445,6 +460,10 @@ private:
/*handle reset usb-client rt-rules */
int handle_lan_client_reset_rt(ipa_ip_type iptype);
+
+ /* for pcie modem */
+ virtual int add_connection(int client_index, int v6_num);
+ virtual int del_connection(int client_index, int v6_num);
};
#endif /* IPACM_LAN_H */
diff --git a/ipacm/inc/IPACM_OffloadManager.h b/ipacm/inc/IPACM_OffloadManager.h
index 88a411b..8ac904f 100644
--- a/ipacm/inc/IPACM_OffloadManager.h
+++ b/ipacm/inc/IPACM_OffloadManager.h
@@ -86,7 +86,7 @@ public:
virtual RET getStats(const char * /* upstream */, bool /* reset */,
OffloadStatistics& /* ret */);
- static IPACM_OffloadManager *pInstance; //sky
+ static IPACM_OffloadManager *pInstance;
IpaEventListener *elrInstance;
@@ -96,6 +96,8 @@ public:
bool push_framework_event(const char * if_name, _ipacm_offload_prefix prefix);
+ static int num_offload_v4_tethered_iface;
+
private:
std::list<std::string> valid_ifaces;
diff --git a/ipacm/inc/IPACM_Routing.h b/ipacm/inc/IPACM_Routing.h
index b5ffabc..663076b 100644
--- a/ipacm/inc/IPACM_Routing.h
+++ b/ipacm/inc/IPACM_Routing.h
@@ -55,6 +55,10 @@ public:
~IPACM_Routing();
bool AddRoutingRule(struct ipa_ioc_add_rt_rule *ruleTable);
+
+#ifdef IPA_IOCTL_SET_FNR_COUNTER_INFO
+ bool AddRoutingRule_hw_index(struct ipa_ioc_add_rt_rule *ruleTable, int hw_counter_index);
+#endif //IPA_IOCTL_SET_FNR_COUNTER_INFO
bool DeleteRoutingRule(struct ipa_ioc_del_rt_rule *ruleTable);
bool Commit(enum ipa_ip_type ip);
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h
index 1b917c6..684bfb7 100644
--- a/ipacm/inc/IPACM_Wan.h
+++ b/ipacm/inc/IPACM_Wan.h
@@ -89,6 +89,12 @@ typedef struct _ipa_wan_client
wan_client_rt_hdl wan_rt_hdl[0]; /* depends on number of tx properties */
}ipa_wan_client;
+typedef struct
+{
+ bool coalesce_tcp_enable;
+ bool coalesce_udp_enable;
+}ipacm_coalesce;
+
/* wan iface */
class IPACM_Wan : public IPACM_Iface
{
@@ -215,15 +221,48 @@ public:
return IPACM_SUCCESS;
}
#endif
+ static void coalesce_config(uint8_t qmap_id, bool tcp_enable, bool udp_enable)
+ {
+ if (qmap_id >= IPA_MAX_NUM_SW_PDNS)
+ {
+ IPACMERR("qmap_id (%d) beyond the Max range (%d), abort\n",
+ qmap_id, IPA_MAX_NUM_SW_PDNS);
+ return ;
+ }
+
+ IPACM_Wan::coalesce_enable_info[qmap_id].coalesce_tcp_enable = tcp_enable;
+ IPACM_Wan::coalesce_enable_info[qmap_id].coalesce_udp_enable = udp_enable;
+ IPACMDBG_H(" Updated qmap(%d) coalesce enable TCP:%d UDP:%d\n",
+ qmap_id,
+ IPACM_Wan::coalesce_enable_info[qmap_id].coalesce_tcp_enable,
+ IPACM_Wan::coalesce_enable_info[qmap_id].coalesce_udp_enable);
+ return ;
+ }
+
+ static void coalesce_config_reset()
+ {
+ int i;
+ /* reset coalesce settings on all modem interfaces */
+ for (i = 0; i < IPA_MAX_NUM_SW_PDNS; i++)
+ IPACM_Wan::coalesce_config(i, false, false);
+ return ;
+ }
static uint32_t getWANIP()
{
return curr_wan_ip;
}
- static bool getXlat_Mux_Id()
+ static int getXlat_Mux_Id()
{
- return xlat_mux_id;
+ if (is_xlat)
+ {
+ IPACMDBG_H("xlat_mux_id: %d\n", xlat_mux_id);
+ return xlat_mux_id;
+ } else {
+ IPACMDBG_H("no xlat return invalid mux-id: 0\n");
+ return 0;
+ }
}
static void clearExtProp()
@@ -243,12 +282,13 @@ public:
static int num_v6_flt_rule;
ipacm_wan_iface_type m_is_sta_mode;
- static bool backhaul_is_sta_mode;
+ static ipacm_wan_iface_type backhaul_mode;
static bool is_ext_prop_set;
static uint32_t backhaul_ipv6_prefix[2];
static bool embms_is_on;
static bool backhaul_is_wan_bridge;
+ static bool is_xlat;
static bool isWan_Bridge_Mode()
{
@@ -260,8 +300,16 @@ public:
static int ipa_if_num_tether_v4[IPA_MAX_IFACE_ENTRIES];
static uint32_t ipa_if_num_tether_v6_total;
static int ipa_if_num_tether_v6[IPA_MAX_IFACE_ENTRIES];
+
+ static bool isXlat()
+ {
+ return is_xlat;
+ }
#endif
+ /* indicate coalesce support on tcp or udp*/
+ static ipacm_coalesce coalesce_enable_info[IPA_MAX_NUM_SW_PDNS];
+
private:
bool is_ipv6_frag_firewall_flt_rule_installed;
@@ -292,6 +340,8 @@ private:
bool header_partial_default_wan_v6;
uint8_t ext_router_mac_addr[IPA_MAC_ADDR_SIZE];
uint8_t netdev_mac[IPA_MAC_ADDR_SIZE];
+ /* create additional set of v4 Coalesce RT-rules: tcp udp */
+ uint32_t dft_coalesce_rt_rule_hdl[2*MAX_DEFAULT_v4_ROUTE_RULES+ 2*MAX_DEFAULT_v6_ROUTE_RULES];
static int num_ipv4_modem_pdn;
@@ -314,13 +364,25 @@ private:
int header_name_count;
uint32_t num_wan_client;
uint8_t invalid_mac[IPA_MAC_ADDR_SIZE];
- bool is_xlat;
+ bool is_xlat_local;
/* update network stats for CNE */
int ipa_network_stats_fd;
uint32_t hdr_hdl_dummy_v6;
uint32_t hdr_proc_hdl_dummy_v6;
+ /* handle for UDP mhi frag rule */
+ uint32_t mhi_dl_v4_frag_hdl;
+
+ /* handle for icmpv6 exception rule */
+ uint32_t icmpv6_exception_hdl;
+
+ /* handle for TCP FIN rule */
+ uint32_t tcp_fin_hdl;
+
+ /* handle for TCP RST rule */
+ uint32_t tcp_rst_hdl;
+
inline ipa_wan_client* get_client_memptr(ipa_wan_client *param, int cnt)
{
char *ret = ((char *)param) + (wan_client_len * cnt);
@@ -506,6 +568,9 @@ private:
/* handle new_address event */
int handle_addr_evt(ipacm_event_data_addr *data);
+ /* handle new_address event for q6_mhi */
+ int handle_addr_evt_mhi_q6(ipacm_event_data_addr *data);
+
/* wan default route/filter rule configuration */
int handle_route_add_evt(ipa_ip_type iptype);
@@ -562,10 +627,6 @@ private:
int install_wan_filtering_rule(bool is_sw_routing);
- void change_to_network_order(ipa_ip_type iptype, ipa_rule_attrib* attrib);
-
- bool is_global_ipv6_addr(uint32_t* ipv6_addr);
-
void handle_wlan_SCC_MCC_switch(bool, ipa_ip_type);
void handle_wan_client_SCC_MCC_switch(bool, ipa_ip_type);
@@ -578,6 +639,20 @@ private:
/* construct dummy ethernet header */
int add_dummy_rx_hdr();
+
+ int handle_coalesce_evt();
+
+ int add_offload_frag_rule();
+
+ int delete_offload_frag_rule();
+
+ int add_icmpv6_exception_rule();
+
+ int delete_icmpv6_exception_rule();
+
+ int add_tcp_fin_rst_exception_rule();
+
+ int delete_tcp_fin_rst_exception_rule();
};
#endif /* IPACM_WAN_H */
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index f3c6d65..9c828ee 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -54,6 +54,7 @@ typedef struct _wlan_client_rt_hdl
uint32_t wifi_rt_rule_hdl_v4;
uint32_t wifi_rt_rule_hdl_v6[IPV6_NUM_ADDR];
uint32_t wifi_rt_rule_hdl_v6_wan[IPV6_NUM_ADDR];
+
}wlan_client_rt_hdl;
typedef struct _ipa_wlan_client
@@ -72,6 +73,8 @@ typedef struct _ipa_wlan_client
bool ipv6_header_set;
bool power_save_set;
enum ipa_client_type wigig_ipa_client;
+ /* used for pcie-modem */
+ uint32_t v6_rt_rule_id[IPV6_NUM_ADDR];
wlan_client_rt_hdl wifi_rt_hdl[0]; /* depends on number of tx properties */
}ipa_wlan_client;
@@ -185,6 +188,18 @@ private:
{
for(num_v6 =0;num_v6 < get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6;num_v6++)
{
+ /* send client-v6 delete to pcie modem only with global ipv6 with tx_index = 0 one time*/
+ if(is_global_ipv6_addr(get_client_memptr(wlan_client, clt_indx)->v6_addr[num_v6]) && (IPACM_Wan::backhaul_mode == Q6_MHI_WAN)
+ && (get_client_memptr(wlan_client, clt_indx)->v6_rt_rule_id[num_v6] > 0))
+ {
+ IPACMDBG_H("Delete client index %d ipv6 RT-rules for %d-st ipv6 for rule-id:%d\n", clt_indx,num_v6,
+ get_client_memptr(wlan_client, clt_indx)->v6_rt_rule_id[num_v6]);
+ if (del_connection(clt_indx, num_v6))
+ {
+ IPACMERR("PCIE filter rule deletion failed! (%d-client) %d v6-entry\n",clt_indx, num_v6);
+ }
+ }
+
IPACMDBG_H("Delete client index %d ipv6 Qos rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
rt_hdl = get_client_memptr(wlan_client, clt_indx)->wifi_rt_hdl[tx_index].wifi_rt_rule_hdl_v6[num_v6];
if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
@@ -237,6 +252,11 @@ private:
void handle_SCC_MCC_switch(ipa_ip_type);
+ /* for pcie modem */
+ int add_connection(int client_index, int v6_num);
+
+ int del_connection(int client_index, int v6_num);
+
#ifdef FEATURE_IPACM_RESTART
/*query wlan-clients */
int ipa_query_wlan_client();