Merge "IPACM: add support for new QMI message"
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 251814a..a119746 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -2602,54 +2602,6 @@
}
IPACMDBG_H("Finished delete default iface ipv6 rules \n ");
- /* clean eth-client header, routing rules */
- IPACMDBG_H("left %d eth clients need to be deleted \n ", num_eth_client);
- for (i = 0; i < num_eth_client; i++)
- {
- /* First reset nat rules and then route rules */
- if(get_client_memptr(eth_client, i)->ipv4_set == true)
- {
- IPACMDBG_H("Clean Nat Rules for ipv4:0x%x\n", get_client_memptr(eth_client, i)->v4_addr);
- CtList->HandleNeighIpAddrDelEvt(get_client_memptr(eth_client, i)->v4_addr);
- }
-
- if (delete_eth_rtrules(i, IPA_IP_v4))
- {
- IPACMERR("unbale to delete ecm-client v4 route rules for index %d\n", i);
- res = IPACM_FAILURE;
- goto fail;
- }
-
- if (delete_eth_rtrules(i, IPA_IP_v6))
- {
- IPACMERR("unbale to delete ecm-client v6 route rules for index %d\n", i);
- res = IPACM_FAILURE;
- goto fail;
- }
-
- IPACMDBG_H("Delete %d client header\n", num_eth_client);
-
-
- if(get_client_memptr(eth_client, i)->ipv4_header_set == true)
- {
- if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v4)
- == false)
- {
- res = IPACM_FAILURE;
- goto fail;
- }
- }
-
- if(get_client_memptr(eth_client, i)->ipv6_header_set == true)
- {
- if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v6)
- == false)
- {
- res = IPACM_FAILURE;
- goto fail;
- }
- }
- } /* end of for loop */
/* free the edm clients cache */
IPACMDBG_H("Free ecm clients cache\n");
@@ -2661,11 +2613,6 @@
IPACMDBG_H("depend Got pipe %d rm index : %d \n", tx_prop->tx[0].dst_pipe, IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe]);
IPACM_Iface::ipacmcfg->DelRmDepend(IPACM_Iface::ipacmcfg->ipa_client_rm_map_tbl[tx_prop->tx[0].dst_pipe]);
}
- /* check software routing fl rule hdl */
- if (softwarerouting_act == true && rx_prop != NULL)
- {
- handle_software_routing_disable();
- }
eth_bridge_post_event(IPA_ETH_BRIDGE_IFACE_DOWN, IPA_IP_MAX, NULL);
@@ -2688,6 +2635,56 @@
}
#endif /* defined(FEATURE_IPA_ANDROID)*/
fail:
+ /* clean eth-client header, routing rules */
+ IPACMDBG_H("left %d eth clients need to be deleted \n ", num_eth_client);
+ for (i = 0; i < num_eth_client; i++)
+ {
+ /* First reset nat rules and then route rules */
+ if(get_client_memptr(eth_client, i)->ipv4_set == true)
+ {
+ IPACMDBG_H("Clean Nat Rules for ipv4:0x%x\n", get_client_memptr(eth_client, i)->v4_addr);
+ CtList->HandleNeighIpAddrDelEvt(get_client_memptr(eth_client, i)->v4_addr);
+ }
+
+ if (delete_eth_rtrules(i, IPA_IP_v4))
+ {
+ IPACMERR("unbale to delete ecm-client v4 route rules for index %d\n", i);
+ res = IPACM_FAILURE;
+ }
+
+ if (delete_eth_rtrules(i, IPA_IP_v6))
+ {
+ IPACMERR("unbale to delete ecm-client v6 route rules for index %d\n", i);
+ res = IPACM_FAILURE;
+ }
+
+ IPACMDBG_H("Delete %d client header\n", num_eth_client);
+
+ if(get_client_memptr(eth_client, i)->ipv4_header_set == true)
+ {
+ if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v4)
+ == false)
+ {
+ res = IPACM_FAILURE;
+ }
+ }
+
+ if(get_client_memptr(eth_client, i)->ipv6_header_set == true)
+ {
+ if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v6)
+ == false)
+ {
+ res = IPACM_FAILURE;
+ }
+ }
+ } /* end of for loop */
+
+ /* check software routing fl rule hdl */
+ if (softwarerouting_act == true && rx_prop != NULL)
+ {
+ handle_software_routing_disable();
+ }
+
if (odu_route_rule_v4_hdl != NULL)
{
free(odu_route_rule_v4_hdl);
diff --git a/ipacm/src/IPACM_LanToLan.cpp b/ipacm/src/IPACM_LanToLan.cpp
index bf47a82..d77f389 100644
--- a/ipacm/src/IPACM_LanToLan.cpp
+++ b/ipacm/src/IPACM_LanToLan.cpp
@@ -205,11 +205,15 @@
{
for(it = ++m_iface.begin(); it != m_iface.end(); it++)
{
- /* populate hdr_proc_ctx and routing table handle */
- handle_new_iface_up(&front_iface, &(*it));
+ /* add peer info only when both interfaces support inter-interface communication */
+ if(it->get_m_support_inter_iface_offload())
+ {
+ /* populate hdr_proc_ctx and routing table handle */
+ handle_new_iface_up(&front_iface, &(*it));
- /* add client specific routing rule on existing interface */
- it->add_client_rt_rule_for_new_iface();
+ /* add client specific routing rule on existing interface */
+ it->add_client_rt_rule_for_new_iface();
+ }
}
/* add client specific filtering rule on new interface */
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 00754a1..c067550 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -1653,67 +1653,8 @@
}
IPACMDBG_H("finished deleting default RT rules\n ");
- /* check software routing fl rule hdl */
- if (softwarerouting_act == true && rx_prop != NULL )
- {
- IPACMDBG_H("Delete sw routing filtering rules\n");
- IPACM_Iface::handle_software_routing_disable();
- }
- IPACMDBG_H("finished delete software-routing filtering rules\n ");
-
-
- /* clean wifi-client header, routing rules */
- /* clean wifi client rule*/
- IPACMDBG_H("left %d wifi clients need to be deleted \n ", num_wifi_client);
-
eth_bridge_post_event(IPA_ETH_BRIDGE_IFACE_DOWN, IPA_IP_MAX, NULL);
- for (i = 0; i < num_wifi_client; i++)
- {
- /* First reset nat rules and then route rules */
- if(get_client_memptr(wlan_client, i)->ipv4_set == true)
- {
- IPACMDBG_H("Clean Nat Rules for ipv4:0x%x\n", get_client_memptr(wlan_client, i)->v4_addr);
- CtList->HandleNeighIpAddrDelEvt(get_client_memptr(wlan_client, i)->v4_addr);
- }
-
- if (delete_default_qos_rtrules(i, IPA_IP_v4))
- {
- IPACMERR("unbale to delete v4 default qos route rules for index: %d\n", i);
- res = IPACM_FAILURE;
- goto fail;
- }
-
- if (delete_default_qos_rtrules(i, IPA_IP_v6))
- {
- IPACMERR("unbale to delete v6 default qos route rules for index: %d\n", i);
- res = IPACM_FAILURE;
- goto fail;
- }
-
- IPACMDBG_H("Delete %d client header\n", num_wifi_client);
-
- if(get_client_memptr(wlan_client, i)->ipv4_header_set == true)
- {
- if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v4)
- == false)
- {
- res = IPACM_FAILURE;
- goto fail;
- }
- }
-
- if(get_client_memptr(wlan_client, i)->ipv6_header_set == true)
- {
- if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v6)
- == false)
- {
- res = IPACM_FAILURE;
- goto fail;
- }
- }
- } /* end of for loop */
-
/* free the wlan clients cache */
IPACMDBG_H("Free wlan clients cache\n");
@@ -1733,6 +1674,59 @@
#endif /* defined(FEATURE_IPA_ANDROID)*/
fail:
+ /* clean wifi-client header, routing rules */
+ /* clean wifi client rule*/
+ IPACMDBG_H("left %d wifi clients need to be deleted \n ", num_wifi_client);
+ for (i = 0; i < num_wifi_client; i++)
+ {
+ /* First reset nat rules and then route rules */
+ if(get_client_memptr(wlan_client, i)->ipv4_set == true)
+ {
+ IPACMDBG_H("Clean Nat Rules for ipv4:0x%x\n", get_client_memptr(wlan_client, i)->v4_addr);
+ CtList->HandleNeighIpAddrDelEvt(get_client_memptr(wlan_client, i)->v4_addr);
+ }
+
+ if (delete_default_qos_rtrules(i, IPA_IP_v4))
+ {
+ IPACMERR("unbale to delete v4 default qos route rules for index: %d\n", i);
+ res = IPACM_FAILURE;
+ }
+
+ if (delete_default_qos_rtrules(i, IPA_IP_v6))
+ {
+ IPACMERR("unbale to delete v6 default qos route rules for index: %d\n", i);
+ res = IPACM_FAILURE;
+ }
+
+ IPACMDBG_H("Delete %d client header\n", num_wifi_client);
+
+ if(get_client_memptr(wlan_client, i)->ipv4_header_set == true)
+ {
+ if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v4)
+ == false)
+ {
+ res = IPACM_FAILURE;
+ }
+ }
+
+ if(get_client_memptr(wlan_client, i)->ipv6_header_set == true)
+ {
+ if (m_header.DeleteHeaderHdl(get_client_memptr(wlan_client, i)->hdr_hdl_v6)
+ == false)
+ {
+ res = IPACM_FAILURE;
+ }
+ }
+ } /* end of for loop */
+
+ /* check software routing fl rule hdl */
+ if (softwarerouting_act == true && rx_prop != NULL )
+ {
+ IPACMDBG_H("Delete sw routing filtering rules\n");
+ IPACM_Iface::handle_software_routing_disable();
+ }
+ IPACMDBG_H("finished delete software-routing filtering rules\n ");
+
/* Delete corresponding ipa_rm_resource_name of RX-endpoint after delete all IPV4V6 FT-rule */
if (rx_prop != NULL)
{