diff options
author | Skylar Chang <chiaweic@codeaurora.org> | 2015-08-08 00:03:21 -0700 |
---|---|---|
committer | Skylar Chang <chiaweic@codeaurora.org> | 2015-09-30 13:29:14 -0700 |
commit | 6d768a0e67b81da9d296149c55c7f2d1cca9936e (patch) | |
tree | 074f6c30974362ba9cabdb64a3003855e2dbe859 /ipacm/src/IPACM_Wlan.cpp | |
parent | aec4d3a28128534078da7cb2cbcc6ba85c0cd7f0 (diff) | |
download | ipacfg-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.cpp | 143 |
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: |