diff options
author | ChengYou Ho <chengyouho@google.com> | 2019-12-23 16:59:59 +0800 |
---|---|---|
committer | Wilson Sung <wilsonsung@google.com> | 2020-02-03 13:33:21 +0800 |
commit | dc455fa6e93bcb5a252747bed3941759ce247c38 (patch) | |
tree | a889a4367664513ff539f6556fe7aa9857ec2079 /ipacm/inc | |
parent | 6bafc1497f181945305cba34f8b2f2ddac35b650 (diff) | |
parent | 3ba31701681587a2aba85ad4fed3b0d48e265fd0 (diff) | |
download | ipacfg-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.h | 5 | ||||
-rw-r--r-- | ipacm/inc/IPACM_ConntrackListener.h | 4 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Conntrack_NATApp.h | 12 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Defs.h | 21 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Filtering.h | 12 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Iface.h | 10 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Lan.h | 23 | ||||
-rw-r--r-- | ipacm/inc/IPACM_OffloadManager.h | 4 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Routing.h | 4 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Wan.h | 91 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Wlan.h | 20 |
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(); |