diff options
author | Pooja Kumari <kumarip@codeaurora.org> | 2019-06-04 09:47:56 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-09-19 06:40:17 -0700 |
commit | 660403916cdc71de95f995d586aee4c186f8b99a (patch) | |
tree | 068aa771aba88c7ce8150d689164e1c9ba9ea6aa | |
parent | ea48515e61f4837223ac8546c34939b0b0e13311 (diff) | |
download | android_vendor_qcom_opensource_data-ipa-cfg-mgr-660403916cdc71de95f995d586aee4c186f8b99a.tar.gz android_vendor_qcom_opensource_data-ipa-cfg-mgr-660403916cdc71de95f995d586aee4c186f8b99a.tar.bz2 android_vendor_qcom_opensource_data-ipa-cfg-mgr-660403916cdc71de95f995d586aee4c186f8b99a.zip |
ipacm: fix not support xlat on 2st tethered iface
Add the fix to not support xlat on 2st tethered iface
Change-Id: I6a0c24731e8ba07c48ae4499f0214139d7639b79
-rw-r--r-- | ipacm/inc/IPACM_Wan.h | 11 | ||||
-rw-r--r-- | ipacm/src/IPACM_Lan.cpp | 39 | ||||
-rw-r--r-- | ipacm/src/IPACM_Wan.cpp | 10 | ||||
-rw-r--r-- | ipacm/src/IPACM_Wlan.cpp | 21 |
4 files changed, 53 insertions, 28 deletions
diff --git a/ipacm/inc/IPACM_Wan.h b/ipacm/inc/IPACM_Wan.h index 9f1001a..684bfb7 100644 --- a/ipacm/inc/IPACM_Wan.h +++ b/ipacm/inc/IPACM_Wan.h @@ -253,9 +253,16 @@ public: return curr_wan_ip; } - static bool getXlat_Mux_Id() + static int getXlat_Mux_Id() { - return xlat_mux_id; + if (is_xlat) + { + IPACMDBG_H("xlat_mux_id: %d\n", xlat_mux_id); + return xlat_mux_id; + } else { + IPACMDBG_H("no xlat return invalid mux-id: 0\n"); + return 0; + } } static void clearExtProp() diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp index fff1783..0bd41a4 100644 --- a/ipacm/src/IPACM_Lan.cpp +++ b/ipacm/src/IPACM_Lan.cpp @@ -751,15 +751,19 @@ void IPACM_Lan::event_callback(ipa_cm_event_id event, void *param) { IPACMDBG_H("Received IPA_DOWNSTREAM_ADD event.\n"); #ifdef FEATURE_IPA_ANDROID - /* indicate v4-offload */ - IPACM_OffloadManager::num_offload_v4_tethered_iface++; - - /* xlat not support for 2st tethered iface */ - if (IPACM_Wan::isXlat() && (data->prefix.iptype == IPA_IP_v4) && (IPACM_OffloadManager::num_offload_v4_tethered_iface > 1)) + if (IPACM_Wan::isXlat() && (data->prefix.iptype == IPA_IP_v4)) { - IPACMDBG_H("Not support 2st downstream iface %s for xlat, cur: %d\n", dev_name, - IPACM_OffloadManager::num_offload_v4_tethered_iface); - return; + /* indicate v4-offload */ + IPACM_OffloadManager::num_offload_v4_tethered_iface++; + IPACMDBG_H("in xlat: update num_offload_v4_tethered_iface %d\n", IPACM_OffloadManager::num_offload_v4_tethered_iface); + + /* xlat not support for 2st tethered iface */ + if (IPACM_OffloadManager::num_offload_v4_tethered_iface > 1) + { + IPACMDBG_H("Not support 2st downstream iface %s for xlat, cur: %d\n", dev_name, + IPACM_OffloadManager::num_offload_v4_tethered_iface); + return; + } } IPACMDBG_H(" support downstream iface %s, cur %d\n", dev_name, @@ -1882,6 +1886,7 @@ int IPACM_Lan::handle_wan_up_ex(ipacm_ext_prop *ext_prop, ipa_ip_type iptype, ui ret = handle_uplink_filter_rule(ext_prop, iptype, xlat_mux_id); modem_ul_v6_set = true; } else if (iptype ==IPA_IP_v4 && modem_ul_v4_set == false) { + IPACMDBG_H("check getXlat_Mux_Id:%d\n", IPACM_Wan::getXlat_Mux_Id()); IPACMDBG_H("IPA_IP_v4 xlat_mux_id: %d, modem_ul_v4_set %d\n", xlat_mux_id, modem_ul_v4_set); ret = handle_uplink_filter_rule(ext_prop, iptype, xlat_mux_id); modem_ul_v4_set = true; @@ -3279,7 +3284,7 @@ int IPACM_Lan::handle_uplink_filter_rule(ipacm_ext_prop *prop, ipa_ip_type iptyp int fd; int i, index, eq_index; uint32_t value = 0; - uint8_t qmap_id; + uint8_t qmap_id, xlat_debug; bool result; IPACMDBG_H("Set modem UL flt rules\n"); @@ -3338,13 +3343,14 @@ int IPACM_Lan::handle_uplink_filter_rule(ipacm_ext_prop *prop, ipa_ip_type iptyp flt_index.retain_header = 0; flt_index.embedded_call_mux_id_valid = 1; qmap_id = IPACM_Iface::ipacmcfg->GetQmapId(); + xlat_debug = IPACM_Wan::getXlat_Mux_Id(); flt_index.embedded_call_mux_id = qmap_id; #ifndef FEATURE_IPA_V3 - IPACMDBG_H("flt_index: src pipe: %d, num of rules: %d, ebd pipe: %d, mux id: %d\n", - flt_index.source_pipe_index, flt_index.filter_index_list_len, flt_index.embedded_pipe_index, flt_index.embedded_call_mux_id); + IPACMDBG_H("flt_index: src pipe: %d, num of rules: %d, ebd pipe: %d, mux id: %d, xlat_mux id: %d, wan-debug %d\n", + flt_index.source_pipe_index, flt_index.filter_index_list_len, flt_index.embedded_pipe_index, flt_index.embedded_call_mux_id, xlat_mux_id, xlat_debug); #else /* defined (FEATURE_IPA_V3) */ - IPACMDBG_H("flt_index: src pipe: %d, num of rules: %d, ebd pipe: %d, mux id: %d\n", - flt_index.source_pipe_index, flt_index.rule_id_len, flt_index.embedded_pipe_index, flt_index.embedded_call_mux_id); + IPACMDBG_H("flt_index: src pipe: %d, num of rules: %d, ebd pipe: %d, mux id: %d, xlat_mux id: %d, wan-debug %d\n", + flt_index.source_pipe_index, flt_index.rule_id_len, flt_index.embedded_pipe_index, flt_index.embedded_call_mux_id, xlat_mux_id, xlat_debug); #endif len = sizeof(struct ipa_ioc_add_flt_rule) + prop->num_ext_props * sizeof(struct ipa_flt_rule_add); pFilteringTable = (struct ipa_ioc_add_flt_rule*)malloc(len); @@ -3415,6 +3421,13 @@ int IPACM_Lan::handle_uplink_filter_rule(ipacm_ext_prop *prop, ipa_ip_type iptyp } /* Handle XLAT configuration */ + /* temp wa to reset xlat_mux_id to qmap_id if it's xlat call */ + if (IPACM_Wan::isXlat() && (iptype == IPA_IP_v4)) + { + IPACMDBG_H("WA to replace xlat_mux_id %d with qmap_id: %d\n", xlat_mux_id, qmap_id); + xlat_mux_id = qmap_id; + } + if ((iptype == IPA_IP_v4) && prop->prop[cnt].is_xlat_rule && (xlat_mux_id != 0)) { /* fill the value of meta-data */ diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp index 464a537..db0304a 100644 --- a/ipacm/src/IPACM_Wan.cpp +++ b/ipacm/src/IPACM_Wan.cpp @@ -1005,7 +1005,7 @@ void IPACM_Wan::event_callback(ipa_cm_event_id event, void *param) if ((ipa_interface_index == ipa_if_num) && (m_is_sta_mode == Q6_WAN)) { is_xlat_local = true; - IPACMDBG_H("WAN-LTE (%s) link up, iface: %d is_xlat: %d\n", + IPACMDBG_H("WAN-LTE (%s) link up, iface: %d is_xlat_local: %d\n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name,data->if_index, is_xlat_local); } break; @@ -2146,13 +2146,13 @@ int IPACM_Wan::handle_route_add_evt(ipa_ip_type iptype) IPACM_Wan::is_xlat = is_xlat_local; /* send xlat configuration for installing uplink rules */ - if(IPACM_Wan::is_xlat && (m_is_sta_mode == Q6_WAN)) + if(is_xlat_local && (m_is_sta_mode == Q6_WAN)) { IPACM_Wan::xlat_mux_id = ext_prop->ext[0].mux_id; wanup_data->xlat_mux_id = IPACM_Wan::xlat_mux_id; IPACMDBG_H("Set xlat configuraiton with below information:\n"); - IPACMDBG_H("xlat_enabled: %d xlat_mux_id: %d \n", - IPACM_Wan::is_xlat, xlat_mux_id); + IPACMDBG_H("xlat_enabled: %d set xlat_mux_id: %d \n", + is_xlat_local, IPACM_Wan::xlat_mux_id); } else /*temp put xlat = 0 for Q6_MHI_WAN*/ { @@ -2268,7 +2268,7 @@ int IPACM_Wan::post_wan_up_tether_evt(ipa_ip_type iptype, int ipa_if_num_tether) wanup_data->if_index_tether = ipa_if_num_tether; wanup_data->backhaul_type = m_is_sta_mode; /* xlat mux-id*/ - if(is_xlat && (m_is_sta_mode == Q6_WAN)) + if(is_xlat_local && (m_is_sta_mode == Q6_WAN)) wanup_data->xlat_mux_id = ext_prop->ext[0].mux_id; else wanup_data->xlat_mux_id = 0; diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp index 48fcc7e..395f951 100644 --- a/ipacm/src/IPACM_Wlan.cpp +++ b/ipacm/src/IPACM_Wlan.cpp @@ -562,15 +562,19 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param) { IPACMDBG_H("Received IPA_DOWNSTREAM_ADD event.\n"); #ifdef FEATURE_IPA_ANDROID - /* indicate v4-offload */ - IPACM_OffloadManager::num_offload_v4_tethered_iface++; - - /* xlat not support for 2st tethered iface sky */ - if (IPACM_Wan::isXlat() && (data->prefix.iptype == IPA_IP_v4) && (IPACM_OffloadManager::num_offload_v4_tethered_iface > 1)) + if (IPACM_Wan::isXlat() && (data->prefix.iptype == IPA_IP_v4)) { - IPACMDBG_H("Not support 2st downstream iface %s for xlat, cur: %d\n", dev_name, - IPACM_OffloadManager::num_offload_v4_tethered_iface); - return; + /* indicate v4-offload */ + IPACM_OffloadManager::num_offload_v4_tethered_iface++; + IPACMDBG_H("in xlat: update num_offload_v4_tethered_iface %d\n", IPACM_OffloadManager::num_offload_v4_tethered_iface); + + /* xlat not support for 2st tethered iface */ + if (IPACM_OffloadManager::num_offload_v4_tethered_iface > 1) + { + IPACMDBG_H("Not support 2st downstream iface %s for xlat, cur: %d\n", dev_name, + IPACM_OffloadManager::num_offload_v4_tethered_iface); + return; + } } IPACMDBG_H(" support downstream iface %s, cur %d\n", dev_name, @@ -602,6 +606,7 @@ void IPACM_Wlan::event_callback(ipa_cm_event_id event, void *param) ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(data->prefix.iptype); if (data->prefix.iptype == IPA_IP_v4) { + IPACMDBG_H("check getXlat_Mux_Id:%d\n", IPACM_Wan::getXlat_Mux_Id()); handle_wan_up_ex(ext_prop, data->prefix.iptype, IPACM_Wan::getXlat_Mux_Id()); } |