Merge "IPACM: fix downstream iface list add/del issue"
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");