Here is some code-change for
1. fix the header not clean issue in AP+STA mode for v6
2. checking the wifi client RT rule is setup or not when receive
power-save mode to delete
Change-Id: I2f8cdd39db8813645714c6df8ec5f6a6a7efb5f5
diff --git a/ipacm/inc/IPACM_Wlan.h b/ipacm/inc/IPACM_Wlan.h
index a7f768d..90d1819 100644
--- a/ipacm/inc/IPACM_Wlan.h
+++ b/ipacm/inc/IPACM_Wlan.h
@@ -162,7 +162,7 @@
} /* end of for loop */
/* clean the 4 Qos ipv4 RT rules for client:clt_indx */
- if(ip_type != IPA_IP_v6) /* for ipv4 */
+ if(get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4==true) /* for ipv4 */
{
get_client_memptr(wlan_client, clt_indx)->route_rule_set_v4 = false;
}
@@ -177,7 +177,7 @@
{
for(num_v6 =0;num_v6 < get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6;num_v6++)
{
- IPACMDBG("Delete client index %d ipv6 Qos rules for %d-st ipv6 \n", clt_indx,num_v6);
+ IPACMDBG("Delete client index %d ipv6 Qos rules for %d-st ipv6 for tx:%d\n", clt_indx,num_v6,tx_index);
rt_hdl = get_client_memptr(wlan_client, clt_indx)->wifi_rt_hdl[tx_index].wifi_rt_rule_hdl_v6[num_v6];
if(m_routing.DeleteRoutingHdl(rt_hdl, IPA_IP_v6) == false)
{
@@ -195,9 +195,9 @@
} /* end of for loop */
/* clean the 4 Qos ipv6 RT rules for client:clt_indx */
- if(ip_type != IPA_IP_v4) /* for ipv6 */
+ if(get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 != 0) /* for ipv6 */
{
- get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6=false;
+ get_client_memptr(wlan_client, clt_indx)->route_rule_set_v6 = 0;
}
}
diff --git a/ipacm/src/IPACM_Netlink.cpp b/ipacm/src/IPACM_Netlink.cpp
index c2536a3..0f43ba1 100644
--- a/ipacm/src/IPACM_Netlink.cpp
+++ b/ipacm/src/IPACM_Netlink.cpp
@@ -719,10 +719,21 @@
evt_data.event = IPA_ADDR_ADD_EVENT;
data_addr->if_index = msg_ptr->nl_addr_info.metainfo.ifa_index;
-
+ if(AF_INET6 == msg_ptr->nl_addr_info.attr_info.prefix_addr.ss_family)
+ {
+ IPACMDBG("Posting IPA_ADDR_ADD_EVENT with if index:%d, ipv6 addr:0x%x:%x:%x:%x\n",
+ data_addr->if_index,
+ data_addr->ipv6_addr[0],
+ data_addr->ipv6_addr[1],
+ data_addr->ipv6_addr[2],
+ data_addr->ipv6_addr[3]);
+ }
+ else
+ {
IPACMDBG("Posting IPA_ADDR_ADD_EVENT with if index:%d, ipv4 addr:0x%x\n",
data_addr->if_index,
data_addr->ipv4_addr);
+ }
evt_data.evt_data = data_addr;
IPACM_EvtDispatcher::PostEvt(&evt_data);
}
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 87c84ac..b7e013f 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -1620,19 +1620,18 @@
/* delete the complete header for STA mode*/
- if(header_set_v4 == true)
+ if((header_set_v4 == true) || (header_set_v6 == true))
{
if (m_header.DeleteHeaderHdl(hdr_hdl_sta_v4) == false)
{
+ IPACMERR("ErrorDeleting STA header for v4, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}
- }
- if(header_set_v6 == true)
- {
if (m_header.DeleteHeaderHdl(hdr_hdl_sta_v6) == false)
{
+ IPACMERR("ErrorDeleting STA header for v6, aborting...\n");
res = IPACM_FAILURE;
goto fail;
}