ipacm: fix not support xlat on 2st tethered iface
Add the fix to not support xlat on 2st tethered iface
Change-Id: I6a0c24731e8ba07c48ae4499f0214139d7639b79
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 @@
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 @@
{
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 @@
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 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 @@
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 @@
}
/* 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 @@
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 @@
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 @@
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 @@
{
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 @@
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());
}