IPACM: change DL routing rules back to hashable Change DL routing rules back to hashable routing rules under IPA v4. Acked-by: Shihuan Liu <shihuanl@qti.qualcomm.com> Change-Id: Iadadc7493bf19d03d2c573d3eee495b76a58ff70
diff --git a/ipacm/inc/IPACM_Config.h b/ipacm/inc/IPACM_Config.h index 1aeeec5..926ed5e 100644 --- a/ipacm/inc/IPACM_Config.h +++ b/ipacm/inc/IPACM_Config.h
@@ -252,6 +252,8 @@ int DelExtProp(ipa_ip_type ip_type); + enum ipa_hw_type GetIPAVer(); + int Init(void); inline bool isPrivateSubnet(uint32_t ip_addr) @@ -347,6 +349,7 @@ static const char *DEVICE_NAME_ODU; private: + enum ipa_hw_type ver; static IPACM_Config *pInstance; static const char *DEVICE_NAME; IPACM_Config(void);
diff --git a/ipacm/src/IPACM_Config.cpp b/ipacm/src/IPACM_Config.cpp index d3fa58d..7e747f0 100644 --- a/ipacm/src/IPACM_Config.cpp +++ b/ipacm/src/IPACM_Config.cpp
@@ -157,6 +157,7 @@ memset(flt_rule_count_v4, 0, IPA_CLIENT_MAX*sizeof(int)); memset(flt_rule_count_v6, 0, IPA_CLIENT_MAX*sizeof(int)); memset(bridge_mac, 0, IPA_MAC_ADDR_SIZE*sizeof(uint8_t)); + ver = IPA_HW_None; IPACMDBG_H(" create IPACM_Config constructor\n"); return; @@ -847,3 +848,20 @@ return ipacm_event_name[event_id]; } + +enum ipa_hw_type IPACM_Config::GetIPAVer() +{ + int ret; + + if(ver != IPA_HW_None) + return ver; + + ret = ioctl(m_fd, IPA_IOC_GET_HW_VERSION, &ver); + if(ret != 0) + { + IPACMERR("Failed to get IPA version with error %d.\n", ret); + return IPA_HW_None; + } + IPACMDBG_H("IPA version is %d.\n", ver); + return ver; +}
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp index 7acb668..d574616 100644 --- a/ipacm/src/IPACM_Lan.cpp +++ b/ipacm/src/IPACM_Lan.cpp
@@ -2212,9 +2212,12 @@ rt_rule_entry->rule.hdr_hdl = get_client_memptr(eth_client, eth_index)->hdr_hdl_v4; rt_rule_entry->rule.attrib.u.v4.dst_addr = get_client_memptr(eth_client, eth_index)->v4_addr; rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = 0xFFFFFFFF; -#ifdef FEATURE_IPA_V3 - rt_rule_entry->rule.hashable = false; -#endif + + if(IPACM_Iface::ipacmcfg->GetIPAVer() >= IPA_HW_v4_0) + { + rt_rule_entry->rule.hashable = true; + } + if (false == m_routing.AddRoutingRule(rt_rule)) { IPACMERR("Routing rule addition failed!\n");
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp index a594fe5..14fe0b7 100644 --- a/ipacm/src/IPACM_Wlan.cpp +++ b/ipacm/src/IPACM_Wlan.cpp
@@ -1436,9 +1436,12 @@ rt_rule_entry->rule.hdr_hdl = get_client_memptr(wlan_client, wlan_index)->hdr_hdl_v4; rt_rule_entry->rule.attrib.u.v4.dst_addr = get_client_memptr(wlan_client, wlan_index)->v4_addr; rt_rule_entry->rule.attrib.u.v4.dst_addr_mask = 0xFFFFFFFF; -#ifdef FEATURE_IPA_V3 - rt_rule_entry->rule.hashable = false; -#endif + + if(IPACM_Iface::ipacmcfg->GetIPAVer() >= IPA_HW_v4_0) + { + rt_rule_entry->rule.hashable = true; + } + if (false == m_routing.AddRoutingRule(rt_rule)) { IPACMERR("Routing rule addition failed!\n");