diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2020-03-17 16:31:58 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-11-04 12:35:01 -0800 |
commit | e523e357563fd8bb369e264d8422eadebf614af5 (patch) | |
tree | ecb8702c87ad4e2708da2774c5aa7172485e4c38 | |
parent | a9392c9662a8aa140770b95f2c343c2bb791e8d2 (diff) | |
download | ipacfg-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.cpp | 89 |
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) { |