Merge remote-tracking branch 'goog/qcom/release/LA.UM.8.1.C9.09.00.00.518.167' into qt-r1-dev

 Conflicts:
	ipacm/src/Android.mk

Bug: 134087013
Change-Id: I945efee74f60a919916d4632a3e7c83512b61245
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index 59a8bb2..d2186b6 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -368,6 +368,7 @@
 	uint32_t if_index_tether;
 	uint32_t ipv6_prefix[2];
 	bool is_sta;
+	uint8_t xlat_mux_id;
 }ipacm_event_iface_up_tehter;
 
 typedef enum
diff --git a/ipacm/inc/IPACM_LanToLan.h b/ipacm/inc/IPACM_LanToLan.h
index 66a1835..f1b7aae 100644
--- a/ipacm/inc/IPACM_LanToLan.h
+++ b/ipacm/inc/IPACM_LanToLan.h
@@ -45,9 +45,8 @@
 
 #ifdef FEATURE_IPA_ANDROID
 #include <libxml/list.h>
-#else/* defined(FEATURE_IPA_ANDROID) */
+#endif /* defined(FEATURE_IPA_ANDROID) */
 #include <list>
-#endif /* ndefined(FEATURE_IPA_ANDROID)*/
 
 #define MAX_NUM_CACHED_CLIENT_ADD_EVENT 10
 #define MAX_NUM_IFACE 10
diff --git a/ipacm/src/Android.mk b/ipacm/src/Android.mk
index 9b2a288..78783b1 100644
--- a/ipacm/src/Android.mk
+++ b/ipacm/src/Android.mk
@@ -28,6 +28,8 @@
 LOCAL_CFLAGS := -v
 LOCAL_CFLAGS += -DFEATURE_IPA_ANDROID
 LOCAL_CFLAGS += -DFEATURE_IPACM_RESTART
+LOCAL_CFLAGS += -DFEATURE_ETH_BRIDGE_LE
+
 LOCAL_CFLAGS += -DFEATURE_IPACM_HAL -Wall -Werror -Wno-error=macro-redefined -Wno-enum-compare
 ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
 LOCAL_CFLAGS += -DDEBUG
@@ -64,7 +66,8 @@
 		IPACM_ConntrackClient.cpp \
 		IPACM_ConntrackListener.cpp \
 		IPACM_Log.cpp \
-		IPACM_OffloadManager.cpp
+		IPACM_OffloadManager.cpp \
+		IPACM_LanToLan.cpp
 
 LOCAL_MODULE := ipacm
 LOCAL_INIT_RC := ipacm.rc
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp
index 2c0e263..827839b 100644
--- a/ipacm/src/IPACM_Lan.cpp
+++ b/ipacm/src/IPACM_Lan.cpp
@@ -528,9 +528,10 @@
 			IPACMERR("No event data is found.\n");
 			return;
 		}
-		IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d tether_if_name:%s\n", data_wan_tether->is_sta,
+		IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d tether_if_name:%s xlat_mux_id: %d\n", data_wan_tether->is_sta,
 					data_wan_tether->if_index_tether,
-					IPACM_Iface::ipacmcfg->iface_table[data_wan_tether->if_index_tether].iface_name);
+					IPACM_Iface::ipacmcfg->iface_table[data_wan_tether->if_index_tether].iface_name,
+					data_wan_tether->xlat_mux_id);
 #ifndef FEATURE_IPACM_HAL
 		if (data_wan_tether->if_index_tether != ipa_if_num)
 		{
@@ -591,7 +592,7 @@
 					{
 							ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 							handle_wan_up_ex(ext_prop, IPA_IP_v4,
-								IPACM_Wan::getXlat_Mux_Id());
+								data_wan_tether->xlat_mux_id);
 					} else {
 							handle_wan_up(IPA_IP_v4);
 					}
@@ -601,7 +602,7 @@
 			if (data_wan_tether->is_sta == false)
 			{
 					ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
-					handle_wan_up_ex(ext_prop, IPA_IP_v4, 0);
+					handle_wan_up_ex(ext_prop, IPA_IP_v4, data_wan_tether->xlat_mux_id);
 			} else {
 					handle_wan_up(IPA_IP_v4);
 			}
@@ -775,6 +776,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());
 							}
@@ -1793,6 +1795,7 @@
 		}
 
 		mux.qmap_id = ipacm_config->GetQmapId();
+		IPACMDBG("get mux id %d for rx-endpoint\n", mux.qmap_id);
 		for(cnt=0; cnt<rx_prop->num_rx_props; cnt++)
 		{
 			mux.client = rx_prop->rx[cnt].src_pipe;
@@ -4616,6 +4619,17 @@
 #ifdef FEATURE_L2TP
 	ipacm_event_data_all *evt_data_all;
 #endif
+
+
+/* not enable rndis for lan2lan HW-offload due to android limitation */
+#ifdef FEATURE_IPA_ANDROID
+	if(ipa_if_cate == LAN_IF)
+	{
+		IPACMDBG_H("This is LAN IF (%s):ipa_index (%d) skip lan2lan events for Android \n", IPACM_Iface::ipacmcfg->iface_table[ipa_if_num].iface_name, ipa_if_num);
+		return;
+	}
+#endif
+
 	if(ipv6_addr)
 	{
 		IPACMDBG_H("IPv6 addr: %08x:%08x:%08x:%08x \n", ipv6_addr[0],
diff --git a/ipacm/src/IPACM_LanToLan.cpp b/ipacm/src/IPACM_LanToLan.cpp
index ca39327..ea016ef 100644
--- a/ipacm/src/IPACM_LanToLan.cpp
+++ b/ipacm/src/IPACM_LanToLan.cpp
@@ -143,14 +143,15 @@
 void IPACM_LanToLan::event_callback(ipa_cm_event_id event, void* param)
 {
 	ipacm_event_eth_bridge *eth_bridge_data;
-	ipa_ioc_vlan_iface_info *vlan_iface_data;
-
+	const char *eventName = IPACM_Iface::ipacmcfg->getEventName(event);
 #ifdef FEATURE_L2TP
+	ipa_ioc_vlan_iface_info *vlan_iface_data;
 	ipa_ioc_l2tp_vlan_mapping_info *l2tp_vlan_mapping_data;
-#endif
 	ipacm_event_data_all *vlan_data;
+#endif
 
-	IPACMDBG_H("Get %s event.\n", IPACM_Iface::ipacmcfg->getEventName(event));
+	if (eventName != NULL)
+		IPACMDBG_H("Get %s event.\n", eventName);
 
 	switch(event)
 	{
@@ -240,7 +241,9 @@
 {
 	list<IPACM_LanToLan_Iface>::iterator it;
 	list<l2tp_vlan_mapping_info>::iterator it_mapping;
+#ifdef FEATURE_L2TP
 	bool has_l2tp_iface = false;
+#endif
 
 	IPACMDBG_H("Interface name: %s IP type: %d\n", data->p_iface->dev_name, data->iptype);
 	for(it = m_iface.begin(); it != m_iface.end(); it++)
@@ -290,7 +293,7 @@
 		new_iface.set_m_is_ip_addr_assigned(data->iptype, true);
 
 		m_iface.push_front(new_iface);
-		IPACMDBG_H("Now the total number of interfaces is %d.\n", m_iface.size());
+		IPACMDBG_H("Now the total number of interfaces is %zu.\n", m_iface.size());
 
 		IPACM_LanToLan_Iface &front_iface = m_iface.front();
 #ifdef FEATURE_L2TP
@@ -350,7 +353,9 @@
 void IPACM_LanToLan::handle_iface_down(ipacm_event_eth_bridge *data)
 {
 	list<IPACM_LanToLan_Iface>::iterator it_target_iface;
+#ifdef FEATURE_L2TP
 	bool has_l2tp_iface = false;
+#endif
 
 	IPACMDBG_H("Interface name: %s\n", data->p_iface->dev_name);
 
@@ -822,7 +827,7 @@
 	IPACMDBG_H("Is there l2tp interface? %d\n", m_has_l2tp_iface);
 
 #ifdef FEATURE_L2TP
-	IPACMDBG_H("There are %d vlan interfaces.\n", m_vlan_iface.size());
+	IPACMDBG_H("There are %zu vlan interfaces.\n", m_vlan_iface.size());
 	for(it_vlan = m_vlan_iface.begin(); it_vlan != m_vlan_iface.end(); it_vlan++)
 	{
 		IPACMDBG_H("Vlan iface: %s, id: %d, ipv6 addr: 0x%08x%08x%08x%08x\n", it_vlan->vlan_iface_name,
@@ -835,7 +840,7 @@
 			it_vlan->vlan_client_ipv6_addr[3]);
 	}
 
-	IPACMDBG_H("There are %d vlan-l2tp mapping.\n", m_l2tp_vlan_mapping.size());
+	IPACMDBG_H("There are %zu vlan-l2tp mapping.\n", m_l2tp_vlan_mapping.size());
 	for(it_mapping = m_l2tp_vlan_mapping.begin(); it_mapping != m_l2tp_vlan_mapping.end(); it_mapping++)
 	{
 		IPACMDBG_H("L2tp iface: %s, session id: %d\n", it_mapping->l2tp_iface_name, it_mapping->l2tp_session_id);
@@ -851,13 +856,13 @@
 			it_mapping->l2tp_client_mac[2], it_mapping->l2tp_client_mac[3], it_mapping->l2tp_client_mac[4], it_mapping->l2tp_client_mac[5]);
 	}
 #endif
-	IPACMDBG_H("There are %d interfaces in total.\n", m_iface.size());
+	IPACMDBG_H("There are %zu interfaces in total.\n", m_iface.size());
 	for(it = m_iface.begin(); it != m_iface.end(); it++)
 	{
 		it->print_data_structure_info();
 	}
 
-	IPACMDBG_H("There are %d cached client add events in total.\n", m_cached_client_add_event.size());
+	IPACMDBG_H("There are %zu cached client add events in total.\n", m_cached_client_add_event.size());
 
 	i = 1;
 	for(it_event = m_cached_client_add_event.begin(); it_event != m_cached_client_add_event.end(); it_event++)
@@ -1775,10 +1780,10 @@
 	IPACMDBG_H("Hdr proc ctx for l2tp: %d\n", hdr_proc_ctx_for_l2tp);
 
 	i = 1;
-	IPACMDBG_H("There are %d clients in total.\n", m_client_info.size());
+	IPACMDBG_H("There are %zu clients in total.\n", m_client_info.size());
 	for(it_client = m_client_info.begin(); it_client != m_client_info.end(); it_client++)
 	{
-		IPACMDBG_H("Client %d MAC: 0x%02x%02x%02x%02x%02x%02x Pointer: 0x%08x\n", i, it_client->mac_addr[0], it_client->mac_addr[1],
+		IPACMDBG_H("Client %d MAC: 0x%02x%02x%02x%02x%02x%02x Pointer: 0x%p\n", i, it_client->mac_addr[0], it_client->mac_addr[1],
 			it_client->mac_addr[2], it_client->mac_addr[3], it_client->mac_addr[4], it_client->mac_addr[5], &(*it_client));
 		IPACMDBG_H("Is l2tp client? %d\n", it_client->is_l2tp_client);
 		if(it_client->is_l2tp_client && it_client->mapping_info)
@@ -1877,7 +1882,7 @@
 		i++;
 	}
 
-	IPACMDBG_H("There are %d peer interfaces in total.\n", m_peer_iface_info.size());
+	IPACMDBG_H("There are %zu peer interfaces in total.\n", m_peer_iface_info.size());
 	for(it_peer = m_peer_iface_info.begin(); it_peer != m_peer_iface_info.end(); it_peer++)
 	{
 		print_peer_info(&(*it_peer));
@@ -1899,10 +1904,10 @@
 
 	IPACMDBG_H("Printing peer info for iface %s:\n", peer_info->peer->m_p_iface->dev_name);
 
-	IPACMDBG_H("There are %d flt info in total.\n", peer_info->flt_rule.size());
+	IPACMDBG_H("There are %zu flt info in total.\n", peer_info->flt_rule.size());
 	for(it_flt = peer_info->flt_rule.begin(); it_flt != peer_info->flt_rule.end(); it_flt++)
 	{
-		IPACMDBG_H("Flt rule handle for client 0x%08x:\n", it_flt->p_client);
+		IPACMDBG_H("Flt rule handle for client 0x%p:\n", it_flt->p_client);
 		if(m_is_ip_addr_assigned[IPA_IP_v4])
 		{
 			IPACMDBG_H("IPv4 %d\n", it_flt->flt_rule_hdl[IPA_IP_v4]);
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index f17a951..04f8a89 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -74,10 +74,7 @@
 #include <HAL.h>
 #endif
 
-/* not defined(FEATURE_IPA_ANDROID)*/
-#ifndef FEATURE_IPA_ANDROID
 #include "IPACM_LanToLan.h"
-#endif
 
 #define IPA_DRIVER  "/dev/ipa"
 
@@ -907,6 +904,7 @@
 
 #ifdef FEATURE_ETH_BRIDGE_LE
 	IPACM_LanToLan* lan2lan = IPACM_LanToLan::get_instance();
+	IPACMDBG_H("Staring IPACM_LanToLan instance %p\n", lan2lan);
 #endif
 
 	CtList = new IPACM_ConntrackListener();
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 784fb0e..278f9ac 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -1747,9 +1747,14 @@
 	{
 		wanup_data->is_sta = false;
 	}
+	/* xlat mux-id*/
+	if(is_xlat && (m_is_sta_mode == Q6_WAN))
+		wanup_data->xlat_mux_id = ext_prop->ext[0].mux_id;
+	else
+		wanup_data->xlat_mux_id = 0;
 	IPACMDBG_H("Posting IPA_HANDLE_WAN_UP_TETHER with below information:\n");
-	IPACMDBG_H("tether_if_name:%s, is sta mode:%d\n",
-			IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name, wanup_data->is_sta);
+	IPACMDBG_H("tether_if_name:%s, is sta mode:%d xlat_mux_id: %d\n",
+			IPACM_Iface::ipacmcfg->iface_table[ipa_if_num_tether].iface_name, wanup_data->is_sta, wanup_data->xlat_mux_id);
 	memset(&evt_data, 0, sizeof(evt_data));
 
 	if (iptype == IPA_IP_v4)
diff --git a/ipacm/src/IPACM_Wlan.cpp b/ipacm/src/IPACM_Wlan.cpp
index f17c0e9..427aef3 100644
--- a/ipacm/src/IPACM_Wlan.cpp
+++ b/ipacm/src/IPACM_Wlan.cpp
@@ -366,9 +366,10 @@
 			IPACMERR("No event data is found.\n");
 			return;
 		}
-		IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d tether_if_name:%s\n", data_wan_tether->is_sta,
+		IPACMDBG_H("Backhaul is sta mode?%d, if_index_tether:%d tether_if_name:%s xlat_mux_id: %d\n", data_wan_tether->is_sta,
 					data_wan_tether->if_index_tether,
-					IPACM_Iface::ipacmcfg->iface_table[data_wan_tether->if_index_tether].iface_name);
+					IPACM_Iface::ipacmcfg->iface_table[data_wan_tether->if_index_tether].iface_name,
+					data_wan_tether->xlat_mux_id);
 #ifndef FEATURE_IPACM_HAL
 		if (data_wan_tether->if_index_tether != ipa_if_num)
 		{
@@ -390,7 +391,7 @@
 					{
 						ext_prop = IPACM_Iface::ipacmcfg->GetExtProp(IPA_IP_v4);
 						handle_wan_up_ex(ext_prop, IPA_IP_v4,
-							IPACM_Wan::getXlat_Mux_Id());
+							data_wan_tether->xlat_mux_id);
 					} else {
 						handle_wan_up(IPA_IP_v4);
 					}
diff --git a/ipacm/src/ipacm_vendor_propduct.mk b/ipacm_vendor_product.mk
similarity index 100%
rename from ipacm/src/ipacm_vendor_propduct.mk
rename to ipacm_vendor_product.mk