diff options
-rw-r--r-- | ipacm/src/IPACM_Lan.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ipacm/src/IPACM_Lan.cpp b/ipacm/src/IPACM_Lan.cpp index a1d2ab6..532269f 100644 --- a/ipacm/src/IPACM_Lan.cpp +++ b/ipacm/src/IPACM_Lan.cpp @@ -193,6 +193,14 @@ IPACM_Lan::IPACM_Lan(int iface_index) : IPACM_Iface(iface_index) memset(&prefix, 0, sizeof(prefix)); #ifdef FEATURE_IPACM_HAL + + /* check if Upstream was set before as WIFI with RNDIS case */ + if(ipa_if_cate == LAN_IF && IPACM_Wan::backhaul_is_sta_mode == true) /* LTE */ + { + IPACMDBG_H(" Skip the Upstream falg set on LAN instance (%d) with WIFI backhaul (%d)\n", ipa_if_cate, IPACM_Wan::backhaul_is_sta_mode ); /* RNDIS+WIFI not support on msm*/ + return; + } + /* check if Upstream was set before */ if (IPACM_Wan::isWanUP(ipa_if_num)) { @@ -227,6 +235,7 @@ void IPACM_Lan::event_callback(ipa_cm_event_id event, void *param) } int ipa_interface_index; + uint32_t i; ipacm_ext_prop* ext_prop; ipacm_event_iface_up_tehter* data_wan_tether; @@ -516,6 +525,45 @@ void IPACM_Lan::event_callback(ipa_cm_event_id event, void *param) IPACMERR("IPA_HANDLE_WAN_UP_TETHER tether_if(%d), not valid (%d) ignore\n", data_wan_tether->if_index_tether, ipa_if_num); return; } +#else /* not offload rndis on WIFI mode on MSM targets sky*/ + if (data_wan_tether->is_sta) + { + IPACMERR("Not support RNDIS offload on WIFI mode, dun install UL filter rules for WIFI mode\n"); + + /* clean rndis header, routing rules */ + IPACMDBG_H("left %d eth clients need to be deleted \n ", num_eth_client); + for (i = 0; i < num_eth_client; i++) + { + /* First reset nat rules and then route rules */ + if(get_client_memptr(eth_client, i)->ipv4_set == true) + { + IPACMDBG_H("Clean Nat Rules for ipv4:0x%x\n", get_client_memptr(eth_client, i)->v4_addr); + CtList->HandleNeighIpAddrDelEvt(get_client_memptr(eth_client, i)->v4_addr); + } + if (delete_eth_rtrules(i, IPA_IP_v4)) + IPACMERR("unbale to delete usb-client v4 route rules for index %d\n", i); + + if (delete_eth_rtrules(i, IPA_IP_v6)) + IPACMERR("unbale to delete ecm-client v6 route rules for index %d\n", i); + + IPACMDBG_H("Delete %d client header\n", num_eth_client); + + if(get_client_memptr(eth_client, i)->ipv4_header_set == true) + { + if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v4) + == false) + IPACMERR("unbale to delete usb-client v4 header for index %d\n", i); + } + + if(get_client_memptr(eth_client, i)->ipv6_header_set == true) + { + if (m_header.DeleteHeaderHdl(get_client_memptr(eth_client, i)->hdr_hdl_v6) + == false) + IPACMERR("unbale to delete usb-client v6 header for index %d\n", i); + } + } /* end of for loop */ + return; + } #endif if (ip_type == IPA_IP_v4 || ip_type == IPA_IP_MAX) { @@ -847,6 +895,14 @@ void IPACM_Lan::event_callback(ipa_cm_event_id event, void *param) IPACMDBG_H("Recieved IPA_NEIGH_CLIENT_IP_ADDR_ADD_EVENT event \n"); IPACMDBG_H("check iface %s category: %d\n", dev_name, ipa_if_cate); + /* if RNDIS under WIFI mode in MSM, dun add RT rule*/ +#ifdef FEATURE_IPACM_HAL + if(IPACM_Wan::backhaul_is_sta_mode == true) /* WIFI */ + { + IPACMDBG_H(" dun construct header and RT-rules for RNDIS-PC in WIFI mode on MSM targets (STA %d) \n", IPACM_Wan::backhaul_is_sta_mode); + return; + } +#endif if (ipa_interface_index == ipa_if_num && ipa_if_cate == ODU_IF) { IPACMDBG_H("ODU iface got v4-ip \n"); |