summaryrefslogtreecommitdiff
path: root/ipacm/inc
diff options
context:
space:
mode:
authorWilson Sung <wilsonsung@google.com>2021-05-24 18:29:18 +0800
committerWilson Sung <wilsonsung@google.com>2021-05-24 18:29:35 +0800
commit39e2d762cc5273a7762361905273367e5655458d (patch)
tree7e1f9900341fe21990a095a8a64c5fa9d6b3dd41 /ipacm/inc
parenta31011d1da2a0b670865becfc4f4846b9bfd5545 (diff)
parent934eae9653dcddd84b6b28cb78fae6f3c944ffb4 (diff)
downloadipacfg-mgr-39e2d762cc5273a7762361905273367e5655458d.tar.gz
Bug: 188781413 Change-Id: I952940e51d1b127472a65b827d82ded0f8c350ed
Diffstat (limited to 'ipacm/inc')
-rw-r--r--ipacm/inc/IPACM_ConntrackListener.h18
-rw-r--r--ipacm/inc/IPACM_Defs.h16
-rw-r--r--ipacm/inc/IPACM_Filtering.h2
-rw-r--r--ipacm/inc/IPACM_Iface.h4
-rw-r--r--ipacm/inc/IPACM_Lan.h2
-rw-r--r--ipacm/inc/IPACM_Wan.h39
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();
};