diff --git a/wifi/frameworks/js/napi/inc/wifi_napi_device.h b/wifi/frameworks/js/napi/inc/wifi_napi_device.h index 9e8e6ed11a833f2e5e9d9a818a27713ebcb829ff..bf27171b1b226b83e2e14c17e3e902bc568b3446 100644 --- a/wifi/frameworks/js/napi/inc/wifi_napi_device.h +++ b/wifi/frameworks/js/napi/inc/wifi_napi_device.h @@ -78,11 +78,10 @@ napi_value GetWifiDetailState(napi_env env, napi_callback_info info); napi_value ConfigStaticIp(const napi_env &env, const napi_value &object, WifiDeviceConfig &cppConfig); napi_value ConfigStaticIpv4(const napi_env &env, const napi_value &object, WifiDeviceConfig &cppConfig); napi_value ConfigStaticIpv6(const napi_env &env, const napi_value &object, WifiDeviceConfig &cppConfig); - +napi_value IsRandomMacDisabled(napi_env env, napi_callback_info info); class ScanInfoAsyncContext : public AsyncContext { public: std::vector vecScanInfos; - ScanInfoAsyncContext(napi_env env, napi_async_work work = nullptr, napi_deferred deferred = nullptr) : AsyncContext(env, work, deferred){} diff --git a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp index e6976f715508fb3a1896ff2c632b3d74066ed678..bc6d0c20e2be9c59cf73484273ddbdd207004f89 100644 --- a/wifi/frameworks/js/napi/src/wifi_napi_device.cpp +++ b/wifi/frameworks/js/napi/src/wifi_napi_device.cpp @@ -2011,5 +2011,21 @@ NO_SANITIZE("cfi") napi_value GetWifiDetailState(napi_env env, napi_callback_inf return value; } +NO_SANITIZE("cfi") napi_value IsRandomMacDisabled(napi_env env, napi_callback_info info) +{ + TRACE_FUNC_CALL; + WIFI_NAPI_ASSERT(env, wifiDevicePtr != nullptr, WIFI_OPT_FAILED, SYSCAP_WIFI_STA); + bool isRandomMacDisabled = false; + ErrCode ret = wifiDevicePtr->IsRandomMacDisabled(isRandomMacDisabled); + if (ret != WIFI_OPT_SUCCESS) { + WIFI_LOGE("Is Random Mac Disabeld: %{public}d", ret); + WIFI_NAPI_ASSERT(env, ret == WIFI_OPT_SUCCESS, ret, SYSCAP_WIFI_STA); + } + + napi_value result; + napi_get_boolean(env, isRandomMacDisabled, &result); + return result; +} + } // namespace Wifi } // namespace OHOS diff --git a/wifi/frameworks/js/napi/src/wifi_napi_entry.cpp b/wifi/frameworks/js/napi/src/wifi_napi_entry.cpp index 6ee87db518917a7b902cd8b5cc70db65c9b0edfb..d8d8b21a3d1e03243383586fd83175286ab8b80c 100644 --- a/wifi/frameworks/js/napi/src/wifi_napi_entry.cpp +++ b/wifi/frameworks/js/napi/src/wifi_napi_entry.cpp @@ -439,6 +439,7 @@ static napi_value Init(napi_env env, napi_value exports) { DECLARE_NAPI_FUNCTION("factoryReset", FactoryReset), DECLARE_NAPI_FUNCTION("startWifiDetection", StartWifiDetection), DECLARE_NAPI_FUNCTION("enableHiLinkHandshake", EnableHiLinkHandshake), + DECLARE_NAPI_FUNCTION("isRandomMacDisabled", IsRandomMacDisabled), }; NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc)); diff --git a/wifi/frameworks/native/c_adapter/src/wifi_c_device.cpp b/wifi/frameworks/native/c_adapter/src/wifi_c_device.cpp index c0b1ef1a9dc85bbef5a877b0b65af9a6a88c15cb..f0ec03b9653eb2691347ebfc16a7d0b83a5a882b 100644 --- a/wifi/frameworks/native/c_adapter/src/wifi_c_device.cpp +++ b/wifi/frameworks/native/c_adapter/src/wifi_c_device.cpp @@ -560,6 +560,16 @@ NO_SANITIZE("cfi") WifiErrorCode Get5GHzChannelList(int *result, int *size) } return GetCErrorCode(ret); } + +NO_SANITIZE("cfi") WifiErrorCode IsRandomMacDisabled(bool *isRandomMacDisabled) +{ + return GetCErrorCode(OHOS::Wifi::WIFI_OPT_NOT_SUPPORTED); +} + +NO_SANITIZE("cfi") WifiErrorCode SetRandomMacDisabled(bool isRandomMacDisabled) +{ + return GetCErrorCode(OHOS::Wifi::WIFI_OPT_NOT_SUPPORTED); +} #ifndef OHOS_ARCH_LITE NO_SANITIZE("cfi") WifiErrorCode GetWifiProtect(OHOS::Wifi::WifiProtectMode mode) { diff --git a/wifi/frameworks/native/interfaces/i_wifi_device.h b/wifi/frameworks/native/interfaces/i_wifi_device.h index bfa6f196ff032ad71cf321a6384b6d6bfe70cd90..2d27fe334c2faba9f898c39724202bc8a5574347 100644 --- a/wifi/frameworks/native/interfaces/i_wifi_device.h +++ b/wifi/frameworks/native/interfaces/i_wifi_device.h @@ -661,6 +661,27 @@ public: * @return ErrCode - operation result */ virtual ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) = 0; + + /** + * @Description Get Random Mac Disabeled. + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + virtual ErrCode IsRandomMacDisabled(bool &isRandomMacDisabled) + { + return WIFI_OPT_NOT_SUPPORTED; + } + + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + virtual ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) + { + return WIFI_OPT_NOT_SUPPORTED; + } }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h b/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h index d7fcc695c810ae6ee509da4598d3807d008245dc..945f26607a7ae48a644eef1bcc782cc0c5cdced3 100644 --- a/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h +++ b/wifi/frameworks/native/interfaces/wifi_manager_service_ipc_interface_code.h @@ -95,7 +95,11 @@ enum class DevInterfaceCode { /* WiFi Detection */ WIFI_SVR_CMD_START_WIFI_DETECTION = 0x1052, /* start wifi detection */ - + + /* Is RandomMac Disabled */ + WIFI_SVR_CMD_IS_RANDOMMAC_DISABLED = 0x1053, /* Is RandomMac Disabled */ + WIFI_SVR_CMD_SET_RANDOMMAC_DISABLED = 0x1054, /* Set Is RandomMac Disabled */ + /* 以下CALL BACK类code,不需要进行权限校验 */ WIFI_CBK_CMD_STATE_CHANGE = 0x3000, /* STA state change event */ WIFI_CBK_CMD_CONNECTION_CHANGE = 0x3001, /* STA connection state change event */ diff --git a/wifi/frameworks/native/libwifi_sdk.map b/wifi/frameworks/native/libwifi_sdk.map index b2bb0a914fb2a331c5166d39ac1e5d1f515f1f55..cdf127180e4594d59e2f5ec2c5cf472f9469b14a 100644 --- a/wifi/frameworks/native/libwifi_sdk.map +++ b/wifi/frameworks/native/libwifi_sdk.map @@ -83,6 +83,8 @@ SetVoWifiDetectPeriod; GetVoWifiDetectPeriod; GetMultiLinkedInfo; + IsRandomMacDisabled; + SetRandomMacDisabled; "*CompositeWifiFilter*"; EnableLocalOnlyHotspot; DisableLocalOnlyHotspot; diff --git a/wifi/frameworks/native/src/wifi_device_impl.cpp b/wifi/frameworks/native/src/wifi_device_impl.cpp index 0d99fbeda679c5c536ff4072837415a52975805c..93127d7839b19b8cd49006414c38c7c1d9966227 100644 --- a/wifi/frameworks/native/src/wifi_device_impl.cpp +++ b/wifi/frameworks/native/src/wifi_device_impl.cpp @@ -713,5 +713,19 @@ ErrCode WifiDeviceImpl::GetMultiLinkedInfo(std::vector &multiLin return client_->GetMultiLinkedInfo(multiLinkedInfo); } +ErrCode WifiDeviceImpl::IsRandomMacDisabled(bool &isRandomMacDisabled) +{ + std::lock_guard lock(mutex_); + RETURN_IF_FAIL(GetWifiDeviceProxy()); + return client_->IsRandomMacDisabled(isRandomMacDisabled); +} + +ErrCode WifiDeviceImpl::SetRandomMacDisabled(bool isRandomMacDisabled) +{ + std::lock_guard lock(mutex_); + RETURN_IF_FAIL(GetWifiDeviceProxy()); + return client_->SetRandomMacDisabled(isRandomMacDisabled); +} + } // namespace Wifi } // namespace OHOS diff --git a/wifi/frameworks/native/src/wifi_device_impl.h b/wifi/frameworks/native/src/wifi_device_impl.h index 4c3816a2200cc44461481ed143b8cd15c3780cf1..c618dd7ececaf0d457c90b42ac1da346499037c0 100644 --- a/wifi/frameworks/native/src/wifi_device_impl.h +++ b/wifi/frameworks/native/src/wifi_device_impl.h @@ -236,7 +236,7 @@ public: * @return ErrCode - operation result */ ErrCode GetDisconnectedReason(DisconnectedReason &reason) override; - + /** * @Description Set the Country Code * @@ -678,6 +678,21 @@ public: * @return ErrCode - operation result */ ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) override; + + /** + * @Description Is Random Mac Disabled. + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + ErrCode IsRandomMacDisabled(bool &isRandomMacDisabled) override; + + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) override; private: bool GetWifiDeviceProxy(); std::atomic systemAbilityId_; diff --git a/wifi/frameworks/native/src/wifi_device_proxy.cpp b/wifi/frameworks/native/src/wifi_device_proxy.cpp index 129e7f938ed03f195401374e387dcd2d79578ea8..1df91e5f8f83e58803abe886dccc0e7ec021a1cf 100644 --- a/wifi/frameworks/native/src/wifi_device_proxy.cpp +++ b/wifi/frameworks/native/src/wifi_device_proxy.cpp @@ -2943,5 +2943,69 @@ void WifiDeviceProxy::OnWifiStateChanged(int state) g_deviceCallBackStub->SetWifiState(false); } } + +ErrCode WifiDeviceProxy::IsRandomMacDisabled(bool &isRandomMacDisabled) +{ + if (mRemoteDied) { + WIFI_LOGE("failed to `%{public}s`,remote service is died!", __func__); + return WIFI_OPT_FAILED; + } + MessageOption option; + MessageParcel data; + MessageParcel reply; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WIFI_LOGE("Write interface token error: %{public}s", __func__); + return WIFI_OPT_FAILED; + } + data.WriteInt32(0); + int error = Remote()->SendRequest(static_cast(DevInterfaceCode::WIFI_SVR_CMD_IS_RANDOMMAC_DISABLED), + data, reply, option); + if (error != ERR_NONE) { + WIFI_LOGE("Is Random Mac Disabeled (%{public}d) failed,error code is %{public}d", + static_cast(DevInterfaceCode::WIFI_SVR_CMD_IS_RANDOMMAC_DISABLED), error); + return WIFI_OPT_FAILED; + } + + int exception = reply.ReadInt32(); + if (exception) { + return WIFI_OPT_FAILED; + } + int ret = reply.ReadInt32(); + if (ErrCode(ret) != WIFI_OPT_SUCCESS) { + return ErrCode(ret); + } + isRandomMacDisabled = reply.ReadBool(); + return WIFI_OPT_SUCCESS; +} + +ErrCode WifiDeviceProxy::SetRandomMacDisabled(bool isRandomMacDisabled) +{ + if (mRemoteDied) { + WIFI_LOGE("failed to `%{public}s`,remote service is died!", __func__); + return WIFI_OPT_FAILED; + } + MessageOption option; + MessageParcel data; + MessageParcel reply; + if (!data.WriteInterfaceToken(GetDescriptor())) { + WIFI_LOGE("Write interface token error: %{public}s", __func__); + return WIFI_OPT_FAILED; + } + data.WriteInt32(0); + data.WriteBool(isRandomMacDisabled); + int error = Remote()->SendRequest(static_cast(DevInterfaceCode::WIFI_SVR_CMD_SET_RANDOMMAC_DISABLED), + data, reply, option); + if (error != ERR_NONE) { + WIFI_LOGE("Set Random Mac Disabeled (%{public}d) failed,error code is %{public}d", + static_cast(DevInterfaceCode::WIFI_SVR_CMD_SET_RANDOMMAC_DISABLED), error); + return WIFI_OPT_FAILED; + } + + int exception = reply.ReadInt32(); + if (exception) { + return WIFI_OPT_FAILED; + } + return ErrCode(reply.ReadInt32()); +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/frameworks/native/src/wifi_device_proxy.h b/wifi/frameworks/native/src/wifi_device_proxy.h index 111cc51263c571813d45143e28edd841a288c13d..dd19921db67cc108ddae427e0a2cd1dc0763a990 100644 --- a/wifi/frameworks/native/src/wifi_device_proxy.h +++ b/wifi/frameworks/native/src/wifi_device_proxy.h @@ -663,6 +663,21 @@ public: * @return ErrCode - operation result */ ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) override; + + /** + * @Description Is Random Mac Disabled. + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + ErrCode IsRandomMacDisabled(bool &isRandomMacDisabled) override; + + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) override; #ifdef OHOS_ARCH_LITE /** * @Description Handle remote object died event. diff --git a/wifi/interfaces/inner_api/wifi_device.h b/wifi/interfaces/inner_api/wifi_device.h index 7d072c47c153abda017656ca725f876bd72bb055..3a66cc1c01d67bbf27a369f1ebc83899ab144ae3 100644 --- a/wifi/interfaces/inner_api/wifi_device.h +++ b/wifi/interfaces/inner_api/wifi_device.h @@ -227,7 +227,7 @@ public: * @since 10 */ virtual ErrCode GetDisconnectedReason(DisconnectedReason &reason) = 0; - + /** * @Description Set the country code. * @@ -650,6 +650,27 @@ public: * @return ErrCode - operation result */ virtual ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) = 0; + + /** + * @Description Get Random Mac Disabeled. + * @param isRandomMacDisabled: True for disabeled False for enabled + * @return ErrCode - operation result + */ + virtual ErrCode IsRandomMacDisabled(bool &isRandomMacDisabled) + { + return WIFI_OPT_NOT_SUPPORTED; + } + + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return ErrCode - operation result + */ + virtual ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) + { + return WIFI_OPT_NOT_SUPPORTED; + } }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/interfaces/kits/c/wifi_device.h b/wifi/interfaces/kits/c/wifi_device.h index 34af7decfec374e94644115231cb5ef4fff20715..c34c871208048f94e13675c9d643aed867c55b02 100644 --- a/wifi/interfaces/kits/c/wifi_device.h +++ b/wifi/interfaces/kits/c/wifi_device.h @@ -362,6 +362,24 @@ WifiErrorCode GetWifiDetailState(WifiDetailState *state); * @return ErrCode - operation result */ WifiErrorCode GetMultiLinkedInfo(WifiLinkedInfo *result, unsigned int *size); + + /** + * @Description Get Random Mac Disabled. + * @param isRandomMacDisabled: True for disabled False for enabled + * @return Returns {@link WIFI_SUCCESS} get randommacdisabled successfully; returns an error code defined in + * {@link WifiErrorCode} otherwise. + */ +WifiErrorCode IsRandomMacDisabled(bool *isRandomMacDisabled); + + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return Returns {@link WIFI_SUCCESS} set randommacdisabled successfully; returns an error code defined in + * {@link WifiErrorCode} otherwise. + */ +WifiErrorCode SetRandomMacDisabled(bool isRandomMacDisabled); + #ifdef __cplusplus } #endif diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map b/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map index a46dc19ebfdc331c3f2a8ee568ca892dbb3d2965..768f67ba34dafcf3727c21391138d692fcc1bd11 100755 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/libwifi_manager.map @@ -471,6 +471,7 @@ "OHOS::Wifi::ApConfigUse::GetApVaildBands(std::__h::vector>&) const"; "OHOS::Wifi::ApConfigUse::GetApVaildChannel(OHOS::Wifi::BandType, std::__h::vector>&) const"; "OHOS::Wifi::ApConfigUse::UpdateApChannelConfig(OHOS::Wifi::HotspotConfig&) const"; + "OHOS::Wifi::WifiSettings::IsRandomMacDisabled(int)"; }; local: *; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h index 1decb262ef3988f12fe99ca1e8e6cba75f7335cb..4d4ddaa1c43e54f41f6cc7a981fa6b3c1440ad48 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ista_service.h @@ -251,6 +251,14 @@ public: */ virtual ErrCode SetSuspendMode(bool mode) = 0; + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return WifiErrorNo + */ + virtual ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) = 0; + /** * @Description send power mode for wpa. * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_define.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_define.h index b946fb8a9cf56163e8d34c17538947f43b246382..230c6e2f5286bea99f5a999a18e5cea40929e156 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_define.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_define.h @@ -99,7 +99,8 @@ enum SelectedType { NETWORK_SELECTED_BY_WIFIPRO = 3, NETWORK_SELECTED_BY_SELFCURE = 4, NETWORK_SELECTED_BY_ROAM = 5, - NETWORK_SELECTED_BY_REASSOC + NETWORK_SELECTED_BY_REASSOC = 6, + NETWORK_SELECTED_BY_MDM = 7 }; #define WIFI_SIM_GSM_AUTH_MIN_PARAM_COUNT 3 diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp index 48039cef4fc5602eaa1ecab5193a6097bfbb3bcc..89807245d78cd81b7158b9f829544488c505ac62 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.cpp @@ -281,6 +281,14 @@ ErrCode StaInterface::AllowAutoConnect(int32_t networkId, bool isAllowed) return pStaService->AllowAutoConnect(networkId, isAllowed); } +ErrCode StaInterface::SetRandomMacDisabled(bool isRandomMacDisabled) +{ + LOGI("Enter SetRandomMacDisabled, isRandomMacDisabled:%{public}d", isRandomMacDisabled); + std::lock_guard lock(mutex); + CHECK_NULL_AND_RETURN(pStaService, WIFI_OPT_FAILED); + return pStaService->SetRandomMacDisabled(isRandomMacDisabled); +} + ErrCode StaInterface::StartWps(const WpsConfig &config) { LOGI("Enter StartWps.\n"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h index d41eccfac3992ac622e6e2b93b834f77ccf40f16..fb7ce47ad581eae1bb77cfd9565972d6de3a42c4 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_interface.h @@ -254,6 +254,14 @@ public: */ virtual ErrCode SetSuspendMode(bool mode) override; + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for disabled False for enabled + * @return WifiErrorNo + */ + virtual ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) override; + /** * @Description send power mode for wpa. * diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp index b0f184fb08606974b210576f6aa89a15052824ed..01f32d7c284b213ce179d5a528431ede31813578 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.cpp @@ -710,6 +710,41 @@ ErrCode StaService::AllowAutoConnect(int32_t networkId, bool isAllowed) const return WIFI_OPT_SUCCESS; } +ErrCode StaService::SetRandomMacDisabled(bool isRandomMacDisabled) const +{ + if (WifiSettings::GetInstance().IsRandomMacDisabled() == isRandomMacDisabled) { + return WIFI_OPT_SUCCESS; + } + WifiSettings::GetInstance().SetRandomMacDisabled(isRandomMacDisabled); + ReconnectByMdm(); + return WIFI_OPT_SUCCESS; +} + +ErrCode StaService::ReconnectByMdm() const +{ + WifiLinkedInfo linkedInfo; + WifiConfigCenter::GetInstance().GetLinkedInfo(linkedInfo); + int networkId = linkedInfo.networkId; + if (networkId == INVALID_NETWORK_ID) { + WIFI_LOGE("No network connect"); + return WIFI_OPT_FAILED; + } + WifiDeviceConfig targetNetwork; + if (WifiSettings::GetInstance().GetDeviceConfig(networkId, targetNetwork)) { + WIFI_LOGE("Failed tot get device config"); + return WIFI_OPT_FAILED; + } + + if (targetNetwork.wifiPrivacySetting == WifiPrivacyConfig::RANDOMMAC) { + Disconnect(); + if (ConnectToNetwork(networkId, NETWORK_SELECTED_BY_MDM) != WIFI_OPT_SUCCESS) { + WIFI_LOGE("Connect to network failed"); + return WIFI_OPT_FAILED; + } + } + return WIFI_OPT_SUCCESS; +} + ErrCode StaService::Disconnect() const { WIFI_LOGI("Enter Disconnect.\n"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h index 686bfaa4db094e699a84f2aea994c5f9aa2fd124..6423b3e392d1ba50a792b00f3b47c7eff2dc26e5 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service.h @@ -198,6 +198,13 @@ public: * @return ErrCode - operation result */ virtual ErrCode AllowAutoConnect(int32_t networkId, bool isAllowed) const; + /** + * @Description Set Random Mac Disabled. + * + * @param isRandomMacDisabled: True for Disabled, false for enabled + * @return ErrCode - operation result + */ + virtual ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) const; /** * @Description Start WPS Connection * @@ -411,7 +418,7 @@ public: */ virtual ErrCode DeliverAudioState(int state); -/** + /** * @Description fold status * * @return success: WIFI_OPT_SUCCESS, failed: WIFI_OPT_FAILED @@ -462,6 +469,7 @@ public: virtual ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) const; #endif private: + ErrCode ReconnectByMdm() const; void NotifyDeviceConfigChange(ConfigChange value, WifiDeviceConfig config, bool isRemoveAll) const; void NotifyCandidateApprovalStatus(CandidateApprovalStatus status) const; int FindDeviceConfig(const WifiDeviceConfig &config, WifiDeviceConfig &outConfig) const; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp index ca3f3283dc1be369401761e86bde73fb04e7d9ae..51c8ac233af82c0675bcdfbadaf8844ca25b258f 100755 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_state_machine.cpp @@ -646,7 +646,8 @@ bool StaStateMachine::InitState::NotAllowConnectToNetwork(int networkId, const s return true; } - if (networkId == pStaStateMachine->linkedInfo.networkId && connTriggerMode != NETWORK_SELECTED_BY_SELFCURE) { + if (networkId == pStaStateMachine->linkedInfo.networkId && connTriggerMode != NETWORK_SELECTED_BY_SELFCURE && + connTriggerMode != NETWORK_SELECTED_BY_MDM) { WIFI_LOGI("This network is connected and does not need to be reconnected m_instId = %{public}d", pStaStateMachine->m_instId); return true; @@ -1062,7 +1063,8 @@ bool StaStateMachine::SetRandomMac(WifiDeviceConfig &deviceConfig, const std::st #ifdef SUPPORT_LOCAL_RANDOM_MAC std::string currentMac, realMac; WifiSettings::GetInstance().GetRealMacAddress(realMac, m_instId); - if (deviceConfig.wifiPrivacySetting == WifiPrivacyConfig::DEVICEMAC || ShouldUseFactoryMac(deviceConfig)) { + if (deviceConfig.wifiPrivacySetting == WifiPrivacyConfig::DEVICEMAC || + WifiSettings::GetInstance().IsRandomMacDisabled() || ShouldUseFactoryMac(deviceConfig)) { currentMac = realMac; } else { WifiStoreRandomMac randomMacInfo; @@ -1095,8 +1097,10 @@ bool StaStateMachine::SetRandomMac(WifiDeviceConfig &deviceConfig, const std::st return false; } deviceConfig.macAddress = currentMac; - deviceConfig.wifiPrivacySetting = - (currentMac == realMac) ? WifiPrivacyConfig::DEVICEMAC : WifiPrivacyConfig::RANDOMMAC; + if (!WifiSettings::GetInstance().IsRandomMacDisabled()) { + deviceConfig.wifiPrivacySetting = + (currentMac == realMac) ? WifiPrivacyConfig::DEVICEMAC : WifiPrivacyConfig::RANDOMMAC; + } WifiSettings::GetInstance().AddDeviceConfig(deviceConfig); WifiSettings::GetInstance().SyncDeviceConfig(); LOGI("SetRandomMac wifiPrivacySetting:%{public}d,ssid:%{public}s,keyMgmt:%{public}s,macAddress:%{public}s", diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp index fcae699e22b76695d9d3d38a13072a0dfe304404..8ea09736e2a94c72673de34d952dbdafd6e226eb 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.cpp @@ -2713,5 +2713,38 @@ bool WifiDeviceServiceImpl::IsDisableWifiProhibitedByEdm(void) } return false; } + +ErrCode WifiDeviceServiceImpl::IsRandomMacDisabled(bool &isRandomMacDisabled) +{ + if (WifiPermissionUtils::VerifyGetWifiInfoPermission() == PERMISSION_DENIED) { + WIFI_LOGE("IsRandomMacDisabled:VerifyGetWifiInfoPermission() PERMISSION_DENIED!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (WifiPermissionUtils::VerifyGetWifiConfigPermission() == PERMISSION_DENIED) { + WIFI_LOGE("IsRandomMacDisabled:VerifyGetWifiConfigPermission() PERMISSION_DENIED!"); + return WIFI_OPT_PERMISSION_DENIED; + } + + isRandomMacDisabled = WifiSettings::GetInstance().IsRandomMacDisabled(); + WIFI_LOGI("Get isRandomMacDisabled success, isRandomMacDisabled= %{public}d", isRandomMacDisabled); + return WIFI_OPT_SUCCESS; +} + +ErrCode WifiDeviceServiceImpl::SetRandomMacDisabled(bool isRandomMacDisabled) +{ + if (WifiPermissionUtils::VerifyManageEdmPolicyPermission() == PERMISSION_DENIED) { + WIFI_LOGE("SetRandomMacDisabeled:VerifyManageEdmPolicyPermission() PERMISSION_DENIED!"); + return WIFI_OPT_PERMISSION_DENIED; + } + if (!IsStaServiceRunning()) { + return WIFI_OPT_STA_NOT_OPENED; + } + + IStaService *pService = WifiServiceManager::GetInstance().GetStaServiceInst(m_instId); + if (pService == nullptr) { + return WIFI_OPT_STA_NOT_OPENED; + } + return pService->SetRandomMacDisabled(isRandomMacDisabled); +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.h index 4a8bcad079ce69b11c5385197abd0fd06f4f947a..6cc210bad919e7912a45f5f72f10da82cd62a33e 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_service_impl.h @@ -214,6 +214,10 @@ public: ErrCode GetVoWifiDetectPeriod(int &period) override; ErrCode SetWifiRestrictedList(const std::vector &wifiRestrictedInfoList) override; + + ErrCode SetRandomMacDisabled(bool isRandomMacDisabled) override; + + ErrCode IsRandomMacDisabled(bool &isRandomMacDisabled) override; private: bool Init(); ErrCode CheckCanEnableWifi(void); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.cpp index b74e96123e12f6245eb4c173d4961630cf810810..5de32d3efcae01df244d1915a831bf5cf8b7d114 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.cpp @@ -153,6 +153,10 @@ void WifiDeviceStub::InitHandleMapEx2() (uint32_t code, MessageParcel &data, MessageParcel &reply) { OnGetSignalPollInfoArray(code, data, reply); }; handleFuncMap[static_cast(DevInterfaceCode::WIFI_SVR_CMD_START_WIFI_DETECTION)] = [this] (uint32_t code, MessageParcel &data, MessageParcel &reply) { OnStartWifiDetection(code, data, reply); }; + handleFuncMap[static_cast(DevInterfaceCode::WIFI_SVR_CMD_SET_RANDOMMAC_DISABLED)] = [this] + (uint32_t code, MessageParcel &data, MessageParcel &reply) { OnSetRandomMacDisabled(code, data, reply); }; + handleFuncMap[static_cast(DevInterfaceCode::WIFI_SVR_CMD_IS_RANDOMMAC_DISABLED)] = [this] + (uint32_t code, MessageParcel &data, MessageParcel &reply) { OnIsRandomMacDisabled(code, data, reply); }; } void WifiDeviceStub::InitHandleMap() @@ -1225,7 +1229,6 @@ void WifiDeviceStub::OnGetSupportedFeatures(uint32_t code, MessageParcel &data, if (ret == WIFI_OPT_SUCCESS) { reply.WriteInt64(features); } - return; } @@ -1631,5 +1634,28 @@ void WifiDeviceStub::OnGetVoWifiDetectPeriod(uint32_t code, MessageParcel &data, } return; } + +void WifiDeviceStub::OnIsRandomMacDisabled(uint32_t code, MessageParcel &data, MessageParcel &reply) +{ + WIFI_LOGD("run %{public}s code %{public}u, datasize %{public}zu", __func__, code, data.GetRawDataSize()); + bool isRandomMacDisabled = false; + ErrCode ret = IsRandomMacDisabled(isRandomMacDisabled); + reply.WriteInt32(0); + reply.WriteInt32(ret); + if (ret == WIFI_OPT_SUCCESS) { + reply.WriteBool(isRandomMacDisabled); + } + return; +} + +void WifiDeviceStub::OnSetRandomMacDisabled(uint32_t code, MessageParcel &data, MessageParcel &reply) +{ + WIFI_LOGD("run %{public}s code %{public}u, datasize %{public}zu", __func__, code, data.GetRawDataSize()); + bool isRandomMacDisabled = data.ReadBool(); + ErrCode ret = SetRandomMacDisabled(isRandomMacDisabled); + reply.WriteInt32(0); + reply.WriteInt32(ret); + return; +} } // namespace Wifi } // namespace OHOS diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.h index 2b684794ab19d10fac429cc33e81c2c8c54c01e8..5c7f1247102ea9596d5bc1c5841f63d6cfed88bc 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sta_sa/wifi_device_stub.h @@ -109,6 +109,8 @@ private: void OnGetVoWifiDetectMode(uint32_t code, MessageParcel &data, MessageParcel &reply); void OnSetVoWifiDetectPeriod(uint32_t code, MessageParcel &data, MessageParcel &reply); void OnGetVoWifiDetectPeriod(uint32_t code, MessageParcel &data, MessageParcel &reply); + void OnIsRandomMacDisabled(uint32_t code, MessageParcel &data, MessageParcel &reply); + void OnSetRandomMacDisabled(uint32_t code, MessageParcel &data, MessageParcel &reply); private: void ReadEapConfig(MessageParcel &data, WifiEapConfig &wifiEapConfig); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_file_spec.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_file_spec.cpp index 0040d1662e2d35c22fa903d2ac1a79271508f7f2..3ab927297c63532e9e65a0ab5257255cb82bd1f9 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_file_spec.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_file_spec.cpp @@ -1120,6 +1120,7 @@ void ClearTClass(WifiConfig &item) item.scanOnlySwitch = true; item.realMacAddress = ""; item.staApExclusionType = static_cast(StaApExclusionType::INITIAL_TYPE); + item.isRandomMacDisabled = false; return; } @@ -1297,6 +1298,10 @@ std::map g_wifiConfigSetValueMap = { std::string tmpValue = value; item.staApExclusionType = CheckDataLegal(tmpValue); }}, + {"isRandomMacDisabled", [](WifiConfig &item, const std::string &value) -> void { + std::string tmpValue = value; + item.isRandomMacDisabled = (CheckDataLegal(tmpValue) != 0); + }}, {"version", [](WifiConfig &item, const std::string &value) -> void { //@deprecated }} @@ -1376,6 +1381,7 @@ std::string OutTClassString(WifiConfig &item) ss << " " <<"scanOnlySwitch=" << item.scanOnlySwitch << std::endl; ss << " " <<"realMacAddress=" << item.realMacAddress << std::endl; ss << " " <<"staApExclusionType=" << item.staApExclusionType << std::endl; + ss << " " <<"isRandomMacDisabled=" << item.isRandomMacDisabled << std::endl; ss << " " <<"" << std::endl; return ss.str(); } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp index b04b33842e8e03b9c3aaa5defeb801ccfe291d6b..0f5a09dcf7940edaeb851fbe170443b04769e2c1 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp @@ -1474,6 +1474,24 @@ int WifiSettings::SetWifiDisabledByAirplane(bool disabledByAirplane, int instId) return 0; } +int WifiSettings::SetRandomMacDisabled(bool isRandomMacDisabled, int instId) +{ + std::unique_lock lock(mWifiConfigMutex); + mWifiConfig[instId].isRandomMacDisabled = isRandomMacDisabled; + SyncWifiConfig(); + return 0; +} + +bool WifiSettings::IsRandomMacDisabled(int instId) +{ + std::unique_lock lock(mWifiConfigMutex); + auto iter = mWifiConfig.find(instId); + if (iter != mWifiConfig.end()) { + return iter->second.isRandomMacDisabled; + } + return false; +} + bool WifiSettings::GetWifiDisabledByAirplane(int instId) { std::unique_lock lock(mWifiConfigMutex); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.h b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.h index 779d494ab2607561b12401796d4f11c40dc2bd1b..e7f46d42e2a5abb747366ee30cf89f9c41feb303 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.h @@ -296,6 +296,10 @@ public: int SetWifiDisabledByAirplane(bool disabledByAirplane, int instId = 0); + int SetRandomMacDisabled(bool isRandomMacDisabled, int instId = 0); + + bool IsRandomMacDisabled(int instId = 0); + int GetStaLastRunState(int instId = 0); int SetStaLastRunState(int bRun, int instId = 0); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/include/wifi_internal_msg.h b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/include/wifi_internal_msg.h index 2b1e22a70f203c4e767e35e5a1e98c7084c41e19..404c67854d5e80061b61d8ad6edadc205c640392 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/include/wifi_internal_msg.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/include/wifi_internal_msg.h @@ -275,6 +275,7 @@ struct WifiConfig { bool scanOnlySwitch; std::string realMacAddress; int staApExclusionType; + bool isRandomMacDisabled; WifiConfig() { @@ -321,6 +322,7 @@ struct WifiConfig { scanOnlySwitch = true; realMacAddress = ""; staApExclusionType = static_cast(StaApExclusionType::INITIAL_TYPE); + isRandomMacDisabled = false; } }; diff --git a/wifi/test/fuzztest/frameworks/native/c_adapter/wificdevice_fuzzer/wificdevice_fuzzer.cpp b/wifi/test/fuzztest/frameworks/native/c_adapter/wificdevice_fuzzer/wificdevice_fuzzer.cpp index 1eb32d2fa1092d539ddc26eb7a81eedffee7bc61..325ef2c4cef66d1fb93f199ef77baf22f8b2844d 100644 --- a/wifi/test/fuzztest/frameworks/native/c_adapter/wificdevice_fuzzer/wificdevice_fuzzer.cpp +++ b/wifi/test/fuzztest/frameworks/native/c_adapter/wificdevice_fuzzer/wificdevice_fuzzer.cpp @@ -297,6 +297,25 @@ static void IsBandTypeSupportedTest(const uint8_t* data, size_t size) (void)IsBandTypeSupported(bandType, &supported); } +static void IsRandomMacDisabledTest(const uint8_t* data, size_t size) +{ + bool isRandomMacDisabled = false; + if (size == 0) { + return; + } + isRandomMacDisabled = (static_cast(data[0]) % TWO) ? true : false; + (void)IsRandomMacDisabled(&isRandomMacDisabled); +} + +static void SetRandomMacDisabledTest(const uint8_t* data, size_t size) +{ + bool isRandomMacDisabled = false; + if (size == 0) { + return; + } + isRandomMacDisabled = (static_cast(data[0]) % TWO) ? true : false; + (void)SetRandomMacDisabled(isRandomMacDisabled); +} namespace OHOS { namespace Wifi { bool WifiCDeviceFuzzerTest(const uint8_t* data, size_t size) @@ -324,7 +343,8 @@ namespace Wifi { SetLowLatencyModeTest(data, size); Get5GHzChannelListTest(data, size); IsBandTypeSupportedTest(data, size); - + SetRandomMacDisabledTest(data, size); + IsRandomMacDisabledTest(data, size); return true; } } // namespace Wifi diff --git a/wifi/test/fuzztest/wifi_sta/wifidevicestub_fuzzer/wifidevicestub_fuzzer.cpp b/wifi/test/fuzztest/wifi_sta/wifidevicestub_fuzzer/wifidevicestub_fuzzer.cpp index ebd3c88a22e016f27890565c7a0ffb7d1e103223..f255309e280fc48316eb62449efaf35bc6f490b4 100644 --- a/wifi/test/fuzztest/wifi_sta/wifidevicestub_fuzzer/wifidevicestub_fuzzer.cpp +++ b/wifi/test/fuzztest/wifi_sta/wifidevicestub_fuzzer/wifidevicestub_fuzzer.cpp @@ -1160,6 +1160,30 @@ void OnSetVoWifiDetectPeriodTest(const uint8_t* data, size_t size) OnRemoteRequest(static_cast(DevInterfaceCode::WIFI_SVR_CMD_SET_VOWIFI_DETECT_PERIOD), datas); } +void OnIsRandomMacDisabledTest(const uint8_t* data, size_t size) +{ + MessageParcel datas; + if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) { + LOGE("WriteInterfaceToken failed!"); + return; + } + datas.WriteInt32(0); + datas.WriteBuffer(data, size); + OnRemoteRequest(static_cast(DevInterfaceCode::WIFI_SVR_CMD_IS_RANDOMMAC_DISABLED), datas); +} + +void OnSetRandomMacDisabledTest(const uint8_t* data, size_t size) +{ + MessageParcel datas; + if (!datas.WriteInterfaceToken(FORMMGR_INTERFACE_TOKEN)) { + LOGE("WriteInterfaceToken failed!"); + return; + } + datas.WriteInt32(0); + datas.WriteBuffer(data, size); + OnRemoteRequest(static_cast(DevInterfaceCode::WIFI_SVR_CMD_SET_RANDOMMAC_DISABLED), datas); +} + void OnGetVoWifiDetectPeriodTest(const uint8_t* data, size_t size) { MessageParcel datas; @@ -1257,6 +1281,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) OHOS::Wifi::OnSetVoWifiDetectModeTest(data, size); OHOS::Wifi::OnSetVoWifiDetectPeriodTest(data, size); OHOS::Wifi::OnGetVoWifiDetectPeriodTest(data, size); + OHOS::Wifi::OnIsRandomMacDisabledTest(data, size); + OHOS::Wifi::OnSetRandomMacDisabledTest(data, size); sleep(4); return 0; } diff --git a/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h b/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h index 9125f5511e86ba20ab49e4b64232a399715ba75a..fbf529bb03dae8b4df8f2a15b4d406af3d44caeb 100644 --- a/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h +++ b/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h @@ -217,6 +217,8 @@ public: virtual bool GetScanAlwaysState(int instId) = 0; virtual bool GetSupportHwPnoFlag(int instId = 0) = 0; virtual int SetAcceptUnvalidated(int networkId, bool state) = 0; + virtual bool IsRandomMacDisabled(int instId = 0) = 0; + virtual int SetRandomMacDisabled(bool isRandomMacDisabled, int instId = 0) = 0; }; class WifiSettings : public MockWifiSettings { public: @@ -402,6 +404,8 @@ public: MOCK_METHOD1(GetScanAlwaysState, bool(int instId)); MOCK_METHOD1(GetSupportHwPnoFlag, bool(int instId)); MOCK_METHOD2(SetAcceptUnvalidated, int(int networkId, bool state)); + MOCK_METHOD1(IsRandomMacDisabled, bool(int instId)); + MOCK_METHOD2(SetRandomMacDisabled, int(bool isRandomMacDisabled, int instId)); }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/Mock/mock_wifi_settings.h b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/Mock/mock_wifi_settings.h index ba2de96c6c2a2890291af86f0c1add138f311ce5..e049d5e6449353e4f297d65dc03a34990595a701 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/Mock/mock_wifi_settings.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/Mock/mock_wifi_settings.h @@ -218,6 +218,8 @@ public: virtual int SetAcceptUnvalidated(int networkId, bool state) = 0; virtual int GetHotspotConfig(HotspotConfig &hotspotConfig, int id) = 0; virtual int SetDeviceEphemeral(int networkId, bool isEphemeral) = 0; + virtual bool IsRandomMacDisabled(int instId = 0) = 0; + virtual int SetRandomMacDisabled(bool isRandomMacDisabled, int instId = 0) = 0; }; class WifiSettings : public MockWifiSettings { @@ -405,6 +407,8 @@ public: MOCK_METHOD2(SetAcceptUnvalidated, int(int networkId, bool state)); MOCK_METHOD2(GetHotspotConfig, int(HotspotConfig &hotspotConfig, int id)); MOCK_METHOD2(SetDeviceEphemeral, int(int networkId, bool isEphemeral)); + MOCK_METHOD1(IsRandomMacDisabled, bool(int instId)); + MOCK_METHOD2(SetRandomMacDisabled, int(bool isRandomMacDisabled, int instId)); }; } // namespace Wifi } // namespace OHOS diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_sta_interface.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_sta_interface.cpp index d165525b88768eb470cb2c1ea440ecb5a683b13a..6925daf85e13676f5419226152ad028eb79c138f 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_sta_interface.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_sta_interface.cpp @@ -218,6 +218,12 @@ ErrCode StaInterface::EnableAutoJoin(const std::string &conditionName) return WIFI_OPT_SUCCESS; } +ErrCode StaInterface::SetRandomMacDisabled(bool isRandomMacDisabled) +{ + LOGI("Enter SetRandomMacDisabled, isRandomMacDisabled=[%{public}d]!", isRandomMacDisabled); + return WIFI_OPT_SUCCESS; +} + ErrCode StaInterface::RegisterAutoJoinCondition(const std::string &conditionName, const std::function &autoJoinCondition) { diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_wifi_settings.h b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_wifi_settings.h index f702312bb434f7955c60bf4874e8e3515cbb68c4..f3eef73e7fe004ed7f39bc2166a2af56b57dfc34 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_wifi_settings.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/Mock/mock_wifi_settings.h @@ -122,6 +122,8 @@ public: virtual int SyncWifiRestrictedListConfig() = 0; virtual bool WhetherSetWhiteListConfig() = 0; virtual int SetDeviceEphemeral(int networkId, bool isEphemeral) = 0; + virtual bool IsRandomMacDisabled(int instId = 0) = 0; + virtual int SetRandomMacDisabled(bool isRandomMacDisabled, int instId = 0) = 0; }; class WifiSettings : public MockWifiSettings { @@ -225,6 +227,8 @@ public: MOCK_METHOD1(GetScanOnlySwitchState, int(int instId)); MOCK_METHOD1(SetMloWifiLinkedMaxSpeed, int(int)); MOCK_METHOD2(SetDeviceEphemeral, int(int networkId, bool isEphemeral)); + MOCK_METHOD1(IsRandomMacDisabled, bool(int instId)); + MOCK_METHOD2(SetRandomMacDisabled, int(bool isRandomMacDisabled, int instId)); }; } // namespace OHOS } // namespace Wifi diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service_test.cpp index 54b0f9f0fbb331d33fa59c8d49589ff2903e8808..a2305550bce41b6f8b24d45daedd88a501cfa1d6 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/sta_service_test.cpp @@ -120,6 +120,13 @@ public: void StaServiceStartWifiDetectionTest(); #ifdef FEATURE_WIFI_MDM_RESTRICTED_SUPPORT void StaServiceSetWifiRestrictedListSuccess(); + void StaServiceSetRandomMacDisabledTrueSuccess1(); + void StaServiceSetRandomMacDisabledTrueSuccess2(); + void StaServiceSetRandomMacDisabledFalseSuccess1(); + void StaServiceSetRandomMacDisabledFalseSuccess2(); + void StaServiceReconnectByMdmTest1(); + void StaServiceReconnectByMdmTest2(); + #endif void DisableAutoJoin(); void EnableAutoJoin(); @@ -485,6 +492,66 @@ void StaServiceTest::StaServiceDisconnectSuccess() EXPECT_TRUE(pStaService->Disconnect() == WIFI_OPT_SUCCESS); } +void StaServiceTest::StaServiceSetRandomMacDisabledTrueSuccess1() +{ + pStaService->SetRandomMacDisabled(true); + pStaService->SetRandomMacDisabled(true); + bool result = WifiSettings::GetInstance().IsRandomMacDisabled(0); + EXPECT_EQ(result, true); +} + +void StaServiceTest::StaServiceSetRandomMacDisabledTrueSuccess2() +{ + pStaService->SetRandomMacDisabled(false); + pStaService->SetRandomMacDisabled(true); + bool result = WifiSettings::GetInstance().IsRandomMacDisabled(0); + EXPECT_EQ(result, true); +} + +void StaServiceTest::StaServiceSetRandomMacDisabledFalseSuccess1() +{ + pStaService->SetRandomMacDisabled(true); + pStaService->SetRandomMacDisabled(false); + bool result = WifiSettings::GetInstance().IsRandomMacDisabled(0); + EXPECT_EQ(result, false); +} + +void StaServiceTest::StaServiceSetRandomMacDisabledFalseSuccess2() +{ + pStaService->SetRandomMacDisabled(false); + pStaService->SetRandomMacDisabled(false); + bool result = WifiSettings::GetInstance().IsRandomMacDisabled(0); + EXPECT_EQ(result, false); +} + +void StaServiceTest::StaServiceReconnectByMdmTest1() +{ + WifiDeviceConfig config; + config.wifiPrivacySetting = WifiPrivacyConfig::RANDOMMAC; + + WifiLinkedInfo info; + EXPECT_CALL(WifiConfigCenter::GetInstance(), GetLinkedInfo(_, _)).Times(AtLeast(0)); + EXPECT_CALL(WifiSettings::GetInstance(), GetDeviceConfig(_, _, _)) + .Times(AtLeast(0)).WillOnce(DoAll(SetArgReferee<1>(config), Return(0))); + + pStaService->SetRandomMacDisabled(false); + EXPECT_TRUE(pStaService->ReconnectByMdm() == WIFI_OPT_SUCCESS); +} + +void StaServiceTest::StaServiceReconnectByMdmTest2() +{ + WifiDeviceConfig config; + config.wifiPrivacySetting = WifiPrivacyConfig::RANDOMMAC; + + WifiLinkedInfo info; + EXPECT_CALL(WifiConfigCenter::GetInstance(), GetLinkedInfo(_, _)).Times(AtLeast(0)); + EXPECT_CALL(WifiSettings::GetInstance(), GetDeviceConfig(_, _, _)) + .Times(AtLeast(0)).WillOnce(DoAll(SetArgReferee<1>(config), Return(0))); + + pStaService->SetRandomMacDisabled(true); + EXPECT_TRUE(pStaService->ReconnectByMdm() == WIFI_OPT_SUCCESS); +} + void StaServiceTest::StaServiceStartWpsSuccess() { WpsConfig config; @@ -1033,6 +1100,34 @@ HWTEST_F(StaServiceTest, StaServiceSetWifiRestrictedListSuccess, TestSize.Level0 { StaServiceSetWifiRestrictedListSuccess(); } + +HWTEST_F(StaServiceTest, StaServiceSetRandomMacDisabledTrueSuccess1, TestSize.Level0) +{ + StaServiceSetRandomMacDisabledTrueSuccess1(); +} + +HWTEST_F(StaServiceTest, StaServiceSetRandomMacDisabledTrueSuccess2, TestSize.Level0) +{ + StaServiceSetRandomMacDisabledTrueSuccess2(); +} +HWTEST_F(StaServiceTest, StaServiceSetRandomMacDisabledFalseSuccess1, TestSize.Level0) +{ + StaServiceSetRandomMacDisabledFalseSuccess1(); +} + +HWTEST_F(StaServiceTest, StaServiceSetRandomMacDisabledFalseSuccess2, TestSize.Level0) +{ + StaServiceSetRandomMacDisabledFalseSuccess2(); +} +HWTEST_F(StaServiceTest, StaServiceReconnectByMdmTest1, TestSize.Level0) +{ + StaServiceReconnectByMdmTest1(); +} + +HWTEST_F(StaServiceTest, StaServiceReconnectByMdmTest2, TestSize.Level0) +{ + StaServiceReconnectByMdmTest2(); +} #endif HWTEST_F(StaServiceTest, StaServiceEnableDeviceConfigFail1, TestSize.Level1) diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/wifi_settings_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/wifi_settings_test.cpp index 42587684672d03c16fae7da7c03432062f0b1779..79673c11b1286be13bc4fbea818b944c0be4790a 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/wifi_settings_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/wifi_settings_test.cpp @@ -629,7 +629,7 @@ HWTEST_F(WifiSettingsTest, DecryptionWapiConfigTest, TestSize.Level1) #ifdef SUPPORT_ClOUD_WIFI_ASSET HWTEST_F(WifiSettingsTest, UpdateWifiConfigFormCloudTest, TestSize.Level1) { - WIFI_LOGE("UpdateWifiConfigFormCloudTest enter!"); + WIFI_LOGI("UpdateWifiConfigFormCloudTest enter!"); WifiDeviceConfig config; config.networkId = 0; config.ssid = "test1"; @@ -659,7 +659,7 @@ HWTEST_F(WifiSettingsTest, UpdateWifiConfigFormCloudTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, InKeyMgmtBitsetTest, TestSize.Level1) { - WIFI_LOGE("InKeyMgmtBitsetTest enter!"); + WIFI_LOGI("InKeyMgmtBitsetTest enter!"); WifiDeviceConfig config; std::string keyMgmt; keyMgmt = "ABC"; @@ -681,7 +681,7 @@ HWTEST_F(WifiSettingsTest, InKeyMgmtBitsetTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, SetKeyMgmtBitsetTest, TestSize.Level1) { - WIFI_LOGE("SetKeyMgmtBitset enter!"); + WIFI_LOGI("SetKeyMgmtBitset enter!"); WifiDeviceConfig config; config.keyMgmt = "WPA-PSK"; config.keyMgmtBitset = 0; @@ -695,7 +695,7 @@ HWTEST_F(WifiSettingsTest, SetKeyMgmtBitsetTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, GetAllSuitableEncryptionTest, TestSize.Level1) { - WIFI_LOGE("GetAllSuitableEncryptionTest enter!"); + WIFI_LOGI("GetAllSuitableEncryptionTest enter!"); WifiDeviceConfig config; std::string keyMgmt; std::vector result; @@ -728,7 +728,7 @@ HWTEST_F(WifiSettingsTest, GetDefaultApSsidTest, TestSize.Level1) #ifdef FEATURE_WIFI_MDM_RESTRICTED_SUPPORT HWTEST_F(WifiSettingsTest, AddWifiBlockListConfigTest, TestSize.Level1) { - WIFI_LOGE("AddWifiBlockListConfigTest enter!"); + WIFI_LOGI("AddWifiBlockListConfigTest enter!"); WifiRestrictedInfo info; info.ssid = "blockTest1"; info.bssid = "blockTest_bssid_1"; @@ -741,7 +741,7 @@ HWTEST_F(WifiSettingsTest, AddWifiBlockListConfigTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, AddWifiBlockListConfigFailTest, TestSize.Level1) { - WIFI_LOGE("AddWifiBlockListConfigFailTest enter!"); + WIFI_LOGI("AddWifiBlockListConfigFailTest enter!"); WifiRestrictedInfo info; info.ssid = ""; info.bssid = "111"; @@ -754,7 +754,7 @@ HWTEST_F(WifiSettingsTest, AddWifiBlockListConfigFailTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, AddWifiWhiteListConfigTest, TestSize.Level1) { - WIFI_LOGE("AddWifiWhiteListConfigTest enter!"); + WIFI_LOGI("AddWifiWhiteListConfigTest enter!"); WifiRestrictedInfo info; info.ssid = "whiteTest1"; info.bssid = "whiteTest_bssid_1"; @@ -767,7 +767,7 @@ HWTEST_F(WifiSettingsTest, AddWifiWhiteListConfigTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, AddWifiWhiteListConfigFailTest, TestSize.Level1) { - WIFI_LOGE("AddWifiWhiteListConfigFailTest enter!"); + WIFI_LOGI("AddWifiWhiteListConfigFailTest enter!"); WifiRestrictedInfo info; info.ssid = "whiteTest2"; info.bssid = ""; @@ -780,7 +780,7 @@ HWTEST_F(WifiSettingsTest, AddWifiWhiteListConfigFailTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, FindWifiBlockListConfigTest, TestSize.Level1) { - WIFI_LOGE("FindWifiBlockListConfigTest enter!"); + WIFI_LOGI("FindWifiBlockListConfigTest enter!"); WifiRestrictedInfo info; info.ssid = "blockTest1"; info.bssid = "blockTest_bssid_1"; @@ -799,7 +799,7 @@ HWTEST_F(WifiSettingsTest, FindWifiBlockListConfigTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, FindWifiWhiteListConfigTest, TestSize.Level1) { - WIFI_LOGE("FindWifiWhiteListConfigTest enter!"); + WIFI_LOGI("FindWifiWhiteListConfigTest enter!"); WifiRestrictedInfo info; info.ssid = "whiteTest1"; info.bssid = "whiteTest_bssid_1"; @@ -818,7 +818,7 @@ HWTEST_F(WifiSettingsTest, FindWifiWhiteListConfigTest, TestSize.Level1) HWTEST_F(WifiSettingsTest, whetherSetWhiteListConfigTest, TestSize.Level1) { - WIFI_LOGE("whetherSetWhiteListConfigTest enter!"); + WIFI_LOGI("whetherSetWhiteListConfigTest enter!"); bool result = WifiSettings::GetInstance().WhetherSetWhiteListConfig(); EXPECT_EQ(result, true); @@ -828,6 +828,17 @@ HWTEST_F(WifiSettingsTest, whetherSetWhiteListConfigTest, TestSize.Level1) result = WifiSettings::GetInstance().WhetherSetWhiteListConfig(); EXPECT_EQ(result, false); } + +HWTEST_F(WifiSettingsTest, IsRandomMacDisabledTest, TestSize.Level1) +{ + WIFI_LOGI("IsRandomMacDisabled enter!"); + WifiSettings::GetInstance().SetRandomMacDisabled(true); + bool result = WifiSettings::GetInstance().IsRandomMacDisabled(); + EXPECT_EQ(result, true); + WifiSettings::GetInstance().SetRandomMacDisabled(false); + result = WifiSettings::GetInstance().IsRandomMacDisabled(); + EXPECT_EQ(result, false); +} #endif } // namespace Wifi } // namespace OHO \ No newline at end of file diff --git a/wifi/utils/src/wifi_hisysevent.cpp b/wifi/utils/src/wifi_hisysevent.cpp index bb7b1d88a25df5e79904669d62bc0ddf4e2a5f12..fc494e1c750bc85c8be576b0a2f7e60b9f7c3db6 100644 --- a/wifi/utils/src/wifi_hisysevent.cpp +++ b/wifi/utils/src/wifi_hisysevent.cpp @@ -34,6 +34,7 @@ const std::map g_connectTypeTransMap { { NETWORK_SELECTED_BY_SELFCURE, "SELFCURE_CONNECT" }, { NETWORK_SELECTED_BY_ROAM, "ROMA_CONNECT" }, { NETWORK_SELECTED_BY_REASSOC, "REASSOC" }, + { NETWORK_SELECTED_BY_MDM, "MDM" }, }; constexpr int MAX_DNS_NUM = 10;