Promotion of data.lnx.2.0-00053.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
1057848 I1516aa5d152c3d473a0e6b7368f96c10f0f2fb84 IPACM: add STA offload support on Android platform
1060444 Ie4c2a9eee848ae9cc491c9dd06e70f7acf65dc7b ipacm: Enable IPACM for msm8940
Change-Id: I6b1e8032c19bcfa89d7ea0e92708cff0627ede46
CRs-Fixed: 1057848, 1060444
diff --git a/ipacm/inc/IPACM_Defs.h b/ipacm/inc/IPACM_Defs.h
index ee19097..b613392 100644
--- a/ipacm/inc/IPACM_Defs.h
+++ b/ipacm/inc/IPACM_Defs.h
@@ -281,6 +281,10 @@
int if_index;
int if_index_tether;
enum ipa_ip_type iptype;
+#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN
+ uint32_t ipv4_addr_gw;
+ uint32_t ipv6_addr_gw[4];
+#endif
} ipacm_event_data_iptype;
diff --git a/ipacm/src/Android.mk b/ipacm/src/Android.mk
index c4a8b36..9a4d659 100644
--- a/ipacm/src/Android.mk
+++ b/ipacm/src/Android.mk
@@ -1,6 +1,5 @@
BOARD_PLATFORM_LIST := msm8916
BOARD_PLATFORM_LIST += msm8909
-BOARD_PLATFORM_LIST += msm8937
ifneq ($(call is-board-platform-in-list,$(BOARD_PLATFORM_LIST)),true)
ifneq (,$(filter $(QCOM_BOARD_PLATFORMS),$(TARGET_BOARD_PLATFORM)))
ifneq (, $(filter aarch64 arm arm64, $(TARGET_ARCH)))
diff --git a/ipacm/src/IPACM_IfaceManager.cpp b/ipacm/src/IPACM_IfaceManager.cpp
index ef5e0a0..a142553 100644
--- a/ipacm/src/IPACM_IfaceManager.cpp
+++ b/ipacm/src/IPACM_IfaceManager.cpp
@@ -56,8 +56,8 @@
IPACM_EvtDispatcher::registr(IPA_CFG_CHANGE_EVENT, this); // register for IPA_CFG_CHANGE event
IPACM_EvtDispatcher::registr(IPA_LINK_UP_EVENT, this);
IPACM_EvtDispatcher::registr(IPA_WLAN_AP_LINK_UP_EVENT, this); // register for wlan AP-iface
-#ifndef FEATURE_IPA_ANDROID
IPACM_EvtDispatcher::registr(IPA_WLAN_STA_LINK_UP_EVENT, this); // register for wlan STA-iface
+#ifndef FEATURE_IPA_ANDROID
/* only MDM targets support device on bridge mode */
IPACM_EvtDispatcher::registr(IPA_BRIDGE_LINK_UP_EVENT, this); // register for IPA_BRIDGE_LINK_UP_EVENT event
#endif /* not defined(FEATURE_IPA_ANDROID)*/
diff --git a/ipacm/src/IPACM_Main.cpp b/ipacm/src/IPACM_Main.cpp
index fe13e67..c6ab9ee 100644
--- a/ipacm/src/IPACM_Main.cpp
+++ b/ipacm/src/IPACM_Main.cpp
@@ -533,6 +533,16 @@
ipa_get_if_index(event_wan.upstream_ifname, &(data_iptype->if_index));
ipa_get_if_index(event_wan.tethered_ifname, &(data_iptype->if_index_tether));
data_iptype->iptype = event_wan.ip;
+#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN
+ data_iptype->ipv4_addr_gw = event_wan.ipv4_addr_gw;
+ data_iptype->ipv6_addr_gw[0] = event_wan.ipv6_addr_gw[0];
+ data_iptype->ipv6_addr_gw[1] = event_wan.ipv6_addr_gw[1];
+ data_iptype->ipv6_addr_gw[2] = event_wan.ipv6_addr_gw[2];
+ data_iptype->ipv6_addr_gw[3] = event_wan.ipv6_addr_gw[3];
+ IPACMDBG_H("default gw ipv4 (%x)\n", data_iptype->ipv4_addr_gw);
+ IPACMDBG_H("IPV6 gateway: %08x:%08x:%08x:%08x \n",
+ data_iptype->ipv6_addr_gw[0], data_iptype->ipv6_addr_gw[1], data_iptype->ipv6_addr_gw[2], data_iptype->ipv6_addr_gw[3]);
+#endif
IPACMDBG_H("Received WAN_UPSTREAM_ROUTE_ADD: fid(%d) tether_fid(%d) ip-type(%d)\n", data_iptype->if_index,
data_iptype->if_index_tether, data_iptype->iptype);
evt_data.event = IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT;
diff --git a/ipacm/src/IPACM_Wan.cpp b/ipacm/src/IPACM_Wan.cpp
index 6107c44..4ee6c10 100644
--- a/ipacm/src/IPACM_Wan.cpp
+++ b/ipacm/src/IPACM_Wan.cpp
@@ -719,7 +719,15 @@
{
if (active_v4 == false)
{
+#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN
+ IPACMDBG_H("adding routing table(upstream), dev (%s) ip-type(%d) default gw (%x)\n", dev_name,data->iptype, wan_v4_addr_gw);
+ wan_v4_addr_gw = data->ipv4_addr_gw;
+ wan_v4_addr_gw_set = true;
+ /* Check & construct STA header */
+ handle_sta_header_add_evt();
+#else
IPACMDBG_H("adding routing table(upstream), dev (%s) ip-type(%d)\n", dev_name,data->iptype);
+#endif
handle_route_add_evt(data->iptype);
}
#ifdef FEATURE_IPA_ANDROID
@@ -738,6 +746,17 @@
if (active_v6 == false)
{
IPACMDBG_H("\n get default v6 route (dst:00.00.00.00) upstream\n");
+#ifdef IPA_WAN_MSG_IPv6_ADDR_GW_LEN
+ IPACMDBG_H(" IPV6 gateway: %08x:%08x:%08x:%08x \n",
+ data->ipv6_addr_gw[0], data->ipv6_addr_gw[1], data->ipv6_addr_gw[2], data->ipv6_addr_gw[3]);
+ wan_v6_addr_gw[0] = data->ipv6_addr_gw[0];
+ wan_v6_addr_gw[1] = data->ipv6_addr_gw[1];
+ wan_v6_addr_gw[2] = data->ipv6_addr_gw[2];
+ wan_v6_addr_gw[3] = data->ipv6_addr_gw[3];
+ wan_v6_addr_gw_set = true;
+ /* Check & construct STA header */
+ handle_sta_header_add_evt();
+#endif
handle_route_add_evt(data->iptype);
}
#ifdef FEATURE_IPA_ANDROID
@@ -752,7 +771,7 @@
{
IPACMDBG_H("Received v4 IPA_WAN_UPSTREAM_ROUTE_ADD_EVENT for other iface (%s)\n", IPACM_Iface::ipacmcfg->iface_table[ipa_interface_index].iface_name);
IPACMDBG_H("need clean default v4 route (dst:0.0.0.0) for old iface (%s)\n", dev_name);
-// wan_v4_addr_gw_set = false; /* android requires CnE change too */
+ wan_v4_addr_gw_set = false;
if(m_is_sta_mode == Q6_WAN)
{
del_wan_firewall_rule(IPA_IP_v4);
@@ -795,7 +814,7 @@
if ((data->iptype == IPA_IP_v4) && (active_v4 == true))
{
IPACMDBG_H("get del default v4 route (dst:0.0.0.0)\n");
-// wan_v4_addr_gw_set = false; /* android requires CnE change too */
+ wan_v4_addr_gw_set = false;
#ifdef FEATURE_IPA_ANDROID
/* using ipa_if_index, not netdev_index */
post_wan_down_tether_evt(data->iptype, iface_ipa_index_query(data->if_index_tether));
diff --git a/ipacm/src/IPACM_cfg.xml b/ipacm/src/IPACM_cfg.xml
index fc6314d..9bac7a4 100644
--- a/ipacm/src/IPACM_cfg.xml
+++ b/ipacm/src/IPACM_cfg.xml
@@ -49,6 +49,11 @@
<Category>WAN</Category>
</Iface>
<Iface>
+ <Name>softap0</Name>
+ <Category>UNKNOWN</Category>
+ <WlanMode>full</WlanMode>
+ </Iface>
+ <Iface>
<Name>wlan0</Name>
<Category>UNKNOWN</Category>
<WlanMode>full</WlanMode>