diff options
author | Wilson Sung <wilsonsung@google.com> | 2021-05-24 18:29:18 +0800 |
---|---|---|
committer | Wilson Sung <wilsonsung@google.com> | 2021-05-24 18:29:35 +0800 |
commit | 39e2d762cc5273a7762361905273367e5655458d (patch) | |
tree | 7e1f9900341fe21990a095a8a64c5fa9d6b3dd41 /ipacm/inc | |
parent | a31011d1da2a0b670865becfc4f4846b9bfd5545 (diff) | |
parent | 934eae9653dcddd84b6b28cb78fae6f3c944ffb4 (diff) | |
download | ipacfg-mgr-39e2d762cc5273a7762361905273367e5655458d.tar.gz |
Merge remote-tracking branch 'goog/qcom/release/LA.UM.9.1.C11.11.00.00.841.013' into sc-devandroid-12.0.0_r32android-12.0.0_r29android-12.0.0_r28android-12.0.0_r27android-12.0.0_r26android-12.0.0_r21android-12.0.0_r20android-12.0.0_r19android-12.0.0_r18android-12.0.0_r16android12-qpr1-releaseandroid12-qpr1-d-s3-releaseandroid12-qpr1-d-s2-releaseandroid12-qpr1-d-s1-releaseandroid12-qpr1-d-releaseandroid12-dev
Bug: 188781413
Change-Id: I952940e51d1b127472a65b827d82ded0f8c350ed
Diffstat (limited to 'ipacm/inc')
-rw-r--r-- | ipacm/inc/IPACM_ConntrackListener.h | 18 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Defs.h | 16 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Filtering.h | 2 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Iface.h | 4 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Lan.h | 2 | ||||
-rw-r--r-- | ipacm/inc/IPACM_Wan.h | 39 |
6 files changed, 64 insertions, 17 deletions
diff --git a/ipacm/inc/IPACM_ConntrackListener.h b/ipacm/inc/IPACM_ConntrackListener.h index 24a2c72..2977af7 100644 --- a/ipacm/inc/IPACM_ConntrackListener.h +++ b/ipacm/inc/IPACM_ConntrackListener.h @@ -61,6 +61,13 @@ typedef struct _nat_entry_bundle }nat_entry_bundle; +typedef struct _ct_entry +{ + struct nf_conntrack *ct; + u_int8_t protocol; + enum nf_conntrack_msg_type type; +}ct_entry; + class IPACM_ConntrackListener : public IPACM_Listener { @@ -68,6 +75,7 @@ private: bool isCTReg; bool isNatThreadStart; bool WanUp; + bool isProcessCTDone; NatApp *nat_inst; int NatIfaceCnt; @@ -77,12 +85,14 @@ private: uint32_t nonnat_iface_ipv4_addr[MAX_IFACE_ADDRESS]; uint32_t sta_clnt_ipv4_addr[MAX_STA_CLNT_IFACES]; IPACM_Config *pConfig; + ct_entry *ct_entries; + ct_entry ct_cache[MAX_CONNTRACK_ENTRIES]; #ifdef CT_OPT IPACM_LanToLan *p_lan2lan; #endif void ProcessCTMessage(void *); - void ProcessTCPorUDPMsg(struct nf_conntrack *, + bool ProcessTCPorUDPMsg(struct nf_conntrack *, enum nf_conntrack_msg_type, u_int8_t); void TriggerWANUp(void *); void TriggerWANDown(uint32_t); @@ -104,6 +114,7 @@ public: char wan_ifname[IPA_IFACE_NAME_LEN]; uint32_t wan_ipaddr; ipacm_wan_iface_type backhaul_mode; + bool isReadCTDone; IPACM_ConntrackListener(); void event_callback(ipa_cm_event_id, void *data); inline bool isWanUp() @@ -116,6 +127,11 @@ public: void HandleSTAClientAddEvt(uint32_t); void HandleSTAClientDelEvt(uint32_t); int CreateConnTrackThreads(void); + void readConntrack(int fd); + void processConntrack(void); + void CacheORDeleteConntrack(struct nf_conntrack *ct, + enum nf_conntrack_msg_type type, u_int8_t protocol); + void processCacheConntrack(void); }; extern IPACM_ConntrackListener *CtList; diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h index a3cbba1..82e9c6b 100644 --- a/ipacm/inc/IPACM_Defs.h +++ b/ipacm/inc/IPACM_Defs.h @@ -105,6 +105,11 @@ extern "C" #define NUM_IPV6_PREFIX_FLT_RULE 1 #define NUM_IPV6_PREFIX_MTU_RULE 1 +#define MAX_CONNTRACK_ENTRIES 100 +#define CT_ENTRIES_BUFFER_SIZE 8096 +#define LOOPBACK_MASK 0xFF000000 +#define LOOPBACK_ADDR 0x7F000000 + /*--------------------------------------------------------------------------- Return values indicating error status ---------------------------------------------------------------------------*/ @@ -188,6 +193,10 @@ typedef enum IPA_ETH_BRIDGE_WLAN_SCC_MCC_SWITCH, /* ipacm_event_eth_bridge*/ IPA_SSR_NOTICE, /* NULL*/ IPA_COALESCE_NOTICE, /* NULL*/ +#ifdef IPA_MTU_EVENT_MAX + IPA_MTU_SET, /* ipa_mtu_info */ + IPA_MTU_UPDATE, /* ipacm_event_mtu_info */ +#endif #ifdef FEATURE_L2TP IPA_ADD_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */ IPA_DEL_VLAN_IFACE, /* ipa_ioc_vlan_iface_info */ @@ -402,4 +411,11 @@ typedef struct { _ipacm_offload_prefix prefix; } ipacm_event_ipahal_stream; +#ifdef IPA_MTU_EVENT_MAX +typedef struct _ipacm_event_mtu_info +{ + int if_index; + ipa_mtu_info mtu_info; +} ipacm_event_mtu_info; +#endif #endif /* IPA_CM_DEFS_H */ diff --git a/ipacm/inc/IPACM_Filtering.h b/ipacm/inc/IPACM_Filtering.h index 428c21a..6667235 100644 --- a/ipacm/inc/IPACM_Filtering.h +++ b/ipacm/inc/IPACM_Filtering.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 diff --git a/ipacm/inc/IPACM_Iface.h b/ipacm/inc/IPACM_Iface.h index 55d9e99..35d12db 100644 --- a/ipacm/inc/IPACM_Iface.h +++ b/ipacm/inc/IPACM_Iface.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 @@ -59,7 +59,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define IPV4_DEFAULT_FILTERTING_RULES 3 #ifdef FEATURE_IPA_ANDROID -#define IPV6_DEFAULT_FILTERTING_RULES 8 +#define IPV6_DEFAULT_FILTERTING_RULES 5 #else #define IPV6_DEFAULT_FILTERTING_RULES 4 #endif diff --git a/ipacm/inc/IPACM_Lan.h b/ipacm/inc/IPACM_Lan.h index 605edb5..de64be1 100644 --- a/ipacm/inc/IPACM_Lan.h +++ b/ipacm/inc/IPACM_Lan.h @@ -230,6 +230,8 @@ protected: int reset_to_dummy_flt_rule(ipa_ip_type iptype, uint32_t rule_hdl); + virtual int modify_ipv6_prefix_flt_rule(uint32_t* prefix); + virtual int install_ipv6_prefix_flt_rule(uint32_t* prefix); virtual void delete_ipv6_prefix_flt_rule(); diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h index 31949c5..9460938 100644 --- a/ipacm/inc/IPACM_Wan.h +++ b/ipacm/inc/IPACM_Wan.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 @@ -63,6 +63,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define NETWORK_STATS "%s %llu %llu %llu %llu" #define IPA_NETWORK_STATS_FILE_NAME "/data/misc/ipa/network_stats" +#define IPA_OFFLOAD_TETHER_STATE_FILE_NAME "/data/vendor/ipa/offload_state" typedef struct _wan_client_rt_hdl { @@ -105,8 +106,10 @@ public: static bool wan_up; static bool wan_up_v6; static uint8_t xlat_mux_id; - static uint16_t mtu_default_wan; - uint16_t mtu_size; + + static uint16_t mtu_default_wan_v4; + static uint16_t mtu_default_wan_v6; + /* IPACM interface name */ static char wan_up_dev_name[IF_NAME_LEN]; static uint32_t curr_wan_ip; @@ -145,15 +148,14 @@ public: { if (isWanUP(ipa_if_num_tether)) { - return mtu_default_wan; + return mtu_default_wan_v4; } } else if (iptype == IPA_IP_v6) { if (isWanUP_V6(ipa_if_num_tether)) { - return mtu_default_wan; - + return mtu_default_wan_v6; } } return DEFAULT_MTU_SIZE; @@ -405,6 +407,14 @@ private: /* handle for TCP RST rule */ uint32_t tcp_rst_hdl; + /* V4 MTU value. */ + uint16_t mtu_v4; + bool mtu_v4_set; + + /* V6 MTU value. */ + uint16_t mtu_v6; + bool mtu_v6_set; + inline ipa_wan_client* get_client_memptr(ipa_wan_client *param, int cnt) { char *ret = ((char *)param) + (wan_client_len * cnt); @@ -583,10 +593,13 @@ private: return IPACM_SUCCESS; } - int handle_wan_hdr_init(uint8_t *mac_addr); + int handle_wan_hdr_init(uint8_t *mac_addr, bool replaced = false, int entry = 0); int handle_wan_client_ipaddr(ipacm_event_data_all *data); int handle_wan_client_route_rule(uint8_t *mac_addr, ipa_ip_type iptype); + /* handle_gw_mac_renew, index_client valiud is success */ + int handle_gw_mac_renew(ipacm_event_data_all *data, int index_client); + /* handle new_address event */ int handle_addr_evt(ipacm_event_data_addr *data); @@ -594,10 +607,10 @@ private: 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); + int handle_route_add_evt(ipa_ip_type iptype, bool add_only = false); /* construct complete STA ethernet header */ - int handle_sta_header_add_evt(); + int handle_sta_header_add_evt(bool renew = false); bool check_dft_firewall_rules_attr_mask(IPACM_firewall_conf_t *firewall_config); @@ -612,7 +625,7 @@ private: /* configure the initial firewall filter rules */ int config_dft_embms_rules(ipa_ioc_add_flt_rule *pFilteringTable_v4, ipa_ioc_add_flt_rule *pFilteringTable_v6); - int handle_route_del_evt(ipa_ip_type iptype); + int handle_route_del_evt(ipa_ip_type iptype, bool delete_only = false); int del_dft_firewall_rules(ipa_ip_type iptype); @@ -645,8 +658,6 @@ private: int add_dft_filtering_rule(struct ipa_flt_rule_add* rules, int rule_offset, ipa_ip_type iptype); - int add_tcpv6_filtering_rule(struct ipa_flt_rule_add* rules, int rule_offset); - int install_wan_filtering_rule(bool is_sw_routing); void handle_wlan_SCC_MCC_switch(bool, ipa_ip_type); @@ -676,7 +687,7 @@ private: int delete_tcp_fin_rst_exception_rule(); - /* Query mtu size */ + /* MTU helper functions */ int query_mtu_size(); }; |