summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2020-03-17 16:31:58 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2020-11-04 12:35:01 -0800
commite523e357563fd8bb369e264d8422eadebf614af5 (patch)
treeecb8702c87ad4e2708da2774c5aa7172485e4c38
parenta9392c9662a8aa140770b95f2c343c2bb791e8d2 (diff)
downloadipacfg-mgr-e523e357563fd8bb369e264d8422eadebf614af5.tar.gz
ipacm: fix the rt rule blowup issue
For backhaul keeping down and up, seeing v4/v6 routing rules are not cleam up and resulted in routing tbl blow-up in ipa-hw. Made the fix to clean up routing rules accordingly. Change-Id: Iadbb0841d7f1d0eb9944e029b79a04cb4503a496
-rw-r--r--ipacm/src/IPACM_Wan.cpp89
1 files changed, 34 insertions, 55 deletions
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index ad174c4..8ad4836 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -5276,17 +5276,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 */
@@ -5318,18 +5307,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
@@ -5351,37 +5328,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)
+ {
+ 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++)
{
- /* 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)
+ 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++)
@@ -5430,18 +5421,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)
{