summaryrefslogtreecommitdiff
path: root/ipacm/src/IPACM_Wlan.cpp
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2015-08-08 00:03:21 -0700
committerSkylar Chang <chiaweic@codeaurora.org>2015-09-30 13:29:14 -0700
commit6d768a0e67b81da9d296149c55c7f2d1cca9936e (patch)
tree074f6c30974362ba9cabdb64a3003855e2dbe859 /ipacm/src/IPACM_Wlan.cpp
parentaec4d3a28128534078da7cb2cbcc6ba85c0cd7f0 (diff)
downloadipacfg-mgr-6d768a0e67b81da9d296149c55c7f2d1cca9936e.tar.gz
IPACM: Add support to get tether stats
This changes provides the support to to get tether stats. Change-Id: I668a8fa3ffbab2c714d09543e6d2a7e67ff55eff
Diffstat (limited to 'ipacm/src/IPACM_Wlan.cpp')
-rw-r--r--ipacm/src/IPACM_Wlan.cpp143
1 files changed, 138 insertions, 5 deletions
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index 075da13..530e2bf 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -189,6 +189,14 @@ IPACM_Wlan::IPACM_Wlan(int iface_index) : IPACM_Lan(iface_index)
}
}
#endif
+
+#ifdef FEATURE_IPA_ANDROID
+ /* set the IPA-client pipe enum */
+ if(IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].if_cat == WLAN_IF)
+ {
+ handle_tethering_client(false, IPACM_CLIENT_WLAN);
+ }
+#endif
return;
}
@@ -212,6 +220,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
int wlan_index;
ipacm_ext_prop* ext_prop;
ipacm_event_iface_up* data_wan;
+ ipacm_event_iface_up_tehter* data_wan_tether;
switch (event)
{
@@ -342,7 +351,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
}
#endif
- if (IPACM_Wan::isWanUP())
+ if (IPACM_Wan::isWanUP(ipa_if_num))
{
if(data->iptype == IPA_IP_v4 || data->iptype == IPA_IP_MAX)
{
@@ -359,7 +368,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
}
}
- if(IPACM_Wan::isWanUP_V6())
+ if(IPACM_Wan::isWanUP_V6(ipa_if_num))
{
if((data->iptype == IPA_IP_v6 || data->iptype == IPA_IP_MAX) && num_dft_rt_v6 == 1)
{
@@ -391,7 +400,128 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
}
}
break;
+#ifdef FEATURE_IPA_ANDROID
+ case IPA_HANDLE_WAN_UP_TETHER:
+ IPACMDBG_H("Received IPA_HANDLE_WAN_UP_TETHER event\n");
+
+ data_wan_tether = (ipacm_event_iface_up_tehter*)param;
+ if(data_wan_tether == NULL)
+ {
+ IPACMERR("No event data is found.\n");
+ return;
+ }
+ IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d\n", data_wan_tether->is_sta,
+ data_wan_tether->if_index_tether);
+ if (iface_ipa_index_query(data_wan_tether->if_index_tether) == ipa_if_num)
+ {
+ if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
+ {
+ if(data_wan_tether->is_sta == false)
+ {
+ ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
+ IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v4, 0);
+ }
+ else
+ {
+ IPACM_Lan::handle_wan_up(IPA_IP_v4);
+ }
+ }
+ }
+ break;
+ case IPA_HANDLE_WAN_UP_V6_TETHER:
+ IPACMDBG_H("Received IPA_HANDLE_WAN_UP_V6_TETHER event\n");
+
+ data_wan_tether = (ipacm_event_iface_up_tehter*)param;
+ if(data_wan_tether == NULL)
+ {
+ IPACMERR("No event data is found.\n");
+ return;
+ }
+ IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d\n", data_wan_tether->is_sta,
+ data_wan_tether->if_index_tether);
+ if (iface_ipa_index_query(data_wan_tether->if_index_tether) == ipa_if_num)
+ {
+ if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
+ {
+ if(wlan_ap_index == 0) //install ipv6 prefix rule only once
+ {
+ install_ipv6_prefix_flt_rule(data_wan_tether->ipv6_prefix);
+ }
+ if(data_wan_tether->is_sta == false)
+ {
+ ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v6);
+ IPACM_Lan::handle_wan_up_ex(ext_prop, IPA_IP_v6, 0);
+ }
+ else
+ {
+ IPACM_Lan::handle_wan_up(IPA_IP_v6);
+ }
+ }
+ }
+ break;
+
+ case IPA_HANDLE_WAN_DOWN_TETHER:
+ IPACMDBG_H("Received IPA_HANDLE_WAN_DOWN_TETHER event\n");
+ data_wan_tether = (ipacm_event_iface_up_tehter*)param;
+ if(data_wan_tether == NULL)
+ {
+ IPACMERR("No event data is found.\n");
+ return;
+ }
+ IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d, itself %d\n", data_wan_tether->is_sta,
+ iface_ipa_index_query(data_wan_tether->if_index_tether),
+ ipa_if_num);
+ if (iface_ipa_index_query(data_wan_tether->if_index_tether) == ipa_if_num)
+ {
+ if(data_wan_tether->is_sta == false && wlan_ap_index > 0)
+ {
+ IPACMDBG_H("This is not the first AP instance and not STA mode, ignore WAN_DOWN event.\n");
+ return;
+ }
+ if (rx_prop != NULL)
+ {
+ if(ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX)
+ {
+ handle_wan_down(data_wan_tether->is_sta);
+ }
+ }
+ }
+ break;
+
+ case IPA_HANDLE_WAN_DOWN_V6_TETHER:
+ IPACMDBG_H("Received IPA_HANDLE_WAN_DOWN_V6_TETHER event\n");
+ data_wan_tether = (ipacm_event_iface_up_tehter*)param;
+ if(data_wan_tether == NULL)
+ {
+ IPACMERR("No event data is found.\n");
+ return;
+ }
+ IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d, itself %d\n", data_wan_tether->is_sta,
+ iface_ipa_index_query(data_wan_tether->if_index_tether),
+ ipa_if_num);
+ if (iface_ipa_index_query(data_wan_tether->if_index_tether) == ipa_if_num)
+ {
+ /* clean up v6 RT rules*/
+ IPACMDBG_H("Received IPA_WAN_V6_DOWN in WLAN-instance and need clean up client IPv6 address \n");
+ /* reset wifi-client ipv6 rt-rules */
+ handle_wlan_client_reset_rt(IPA_IP_v6);
+
+ if(data_wan_tether->is_sta == false && wlan_ap_index > 0)
+ {
+ IPACMDBG_H("This is not the first AP instance and not STA mode, ignore WAN_DOWN event.\n");
+ return;
+ }
+ if (rx_prop != NULL)
+ {
+ if(ip_type == IPA_IP_v6 || ip_type == IPA_IP_MAX)
+ {
+ handle_wan_down_v6(data_wan_tether->is_sta);
+ }
+ }
+ }
+ break;
+#else
case IPA_HANDLE_WAN_UP:
IPACMDBG_H("Received IPA_HANDLE_WAN_UP event\n");
@@ -493,6 +623,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
}
}
break;
+#endif
case IPA_WLAN_CLIENT_ADD_EVENT_EX:
{
@@ -873,7 +1004,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param)
case IPA_TETHERING_STATS_UPDATE_EVENT:
{
IPACMDBG_H("Received IPA_TETHERING_STATS_UPDATE_EVENT event.\n");
- if (IPACM_Wan::isWanUP() || IPACM_Wan::isWanUP_V6())
+ if (IPACM_Wan::isWanUP(ipa_if_num) || IPACM_Wan::isWanUP_V6(ipa_if_num))
{
if(IPACM_Wan::backhaul_is_sta_mode == false) /* LTE */
{
@@ -2337,13 +2468,13 @@ int IPACM_Wlan::handle_down_evt()
#endif
/* delete wan filter rule */
- if (IPACM_Wan::isWanUP() && rx_prop != NULL)
+ if (IPACM_Wan::isWanUP(ipa_if_num) && rx_prop != NULL)
{
IPACMDBG_H("LAN IF goes down, backhaul type %d\n", IPACM_Wan::backhaul_is_sta_mode);
IPACM_Lan::handle_wan_down(IPACM_Wan::backhaul_is_sta_mode);
}
- if (IPACM_Wan::isWanUP_V6() && rx_prop != NULL)
+ if (IPACM_Wan::isWanUP_V6(ipa_if_num) && rx_prop != NULL)
{
IPACMDBG_H("LAN IF goes down, backhaul type %d\n", IPACM_Wan::backhaul_is_sta_mode);
IPACM_Lan::handle_wan_down_v6(IPACM_Wan::backhaul_is_sta_mode);
@@ -2631,6 +2762,8 @@ int IPACM_Wlan::handle_down_evt()
IPACMERR(" can't Delete IPACM private subnet_addr as: 0x%x \n", if_ipv4_subnet);
}
}
+ /* reset the IPA-client pipe enum */
+ handle_tethering_client(true, IPACM_CLIENT_WLAN);
#endif /* defined(FEATURE_IPA_ANDROID)*/
fail: