From 2dc47ca9252252cbd0e5d78032274aad33a75bee Mon Sep 17 00:00:00 2001 From: Ye Jiao Date: Mon, 13 Mar 2023 10:58:08 +0800 Subject: [PATCH] Add config to skip state toggle off/on for Wi-Fi NAN If STA and NAN share the same iface wlan0, Wi-Fi vendor HAL service sends eventDisabled to NAN framework when STA setMacAddress to wlan0. This disables NAN when STA is turned on. Since NAN always uses its own random MAC instead of using MAC of STA, this action is not necessary and gets NAN kicked off for no benefits. We add a build time configuration to optionally disable this behavior. Bug: 273426515 Test: manually test Change-Id: Ifc71b7e8d09eac1b66b9e18c70e0e6d202683ff6 --- wifi/1.6/default/Android.bp | 4 ++++ wifi/1.6/default/wifi_nan_iface.cpp | 2 ++ wifi/aidl/default/Android.bp | 4 ++++ wifi/aidl/default/wifi_nan_iface.cpp | 2 ++ 4 files changed, 12 insertions(+) diff --git a/wifi/1.6/default/Android.bp b/wifi/1.6/default/Android.bp index 0f98e71445..6038e367a4 100644 --- a/wifi/1.6/default/Android.bp +++ b/wifi/1.6/default/Android.bp @@ -26,6 +26,7 @@ soong_config_module_type { "hidl_feature_disable_ap", // WIFI_HIDL_FEATURE_DISABLE_AP "hidl_feature_disable_ap_mac_randomization", // WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION "avoid_iface_reset_mac_change", // WIFI_AVOID_IFACE_RESET_MAC_CHANGE + "wifi_skip_state_toggle_off_on_for_nan", // WIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN ], value_variables: [ "hal_interface_combinations", // WIFI_HAL_INTERFACE_COMBINATIONS @@ -53,6 +54,9 @@ wifi_hal_cc_defaults { avoid_iface_reset_mac_change: { cppflags: ["-DWIFI_AVOID_IFACE_RESET_MAC_CHANGE"], }, + wifi_skip_state_toggle_off_on_for_nan: { + cppflags: ["-DWIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN"], + }, hal_interface_combinations: { cppflags: ["-DWIFI_HAL_INTERFACE_COMBINATIONS=%s"], }, diff --git a/wifi/1.6/default/wifi_nan_iface.cpp b/wifi/1.6/default/wifi_nan_iface.cpp index ac2ebc940e..4c61ba7ee5 100644 --- a/wifi/1.6/default/wifi_nan_iface.cpp +++ b/wifi/1.6/default/wifi_nan_iface.cpp @@ -453,6 +453,7 @@ WifiNanIface::WifiNanIface(const std::string& ifname, bool is_dedicated_iface, // Register for iface state toggle events. iface_util::IfaceEventHandlers event_handlers = {}; +#ifndef WIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN event_handlers.on_state_toggle_off_on = [weak_ptr_this](const std::string& /* iface_name */) { const auto shared_ptr_this = weak_ptr_this.promote(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { @@ -467,6 +468,7 @@ WifiNanIface::WifiNanIface(const std::string& ifname, bool is_dedicated_iface, } } }; +#endif iface_util_.lock()->registerIfaceEventHandlers(ifname_, event_handlers); } diff --git a/wifi/aidl/default/Android.bp b/wifi/aidl/default/Android.bp index 441d461b78..91d609ddc7 100644 --- a/wifi/aidl/default/Android.bp +++ b/wifi/aidl/default/Android.bp @@ -26,6 +26,7 @@ soong_config_module_type { "hidl_feature_disable_ap", // WIFI_HIDL_FEATURE_DISABLE_AP "hidl_feature_disable_ap_mac_randomization", // WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION "avoid_iface_reset_mac_change", // WIFI_AVOID_IFACE_RESET_MAC_CHANGE + "wifi_skip_state_toggle_off_on_for_nan", // WIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN ], value_variables: [ "hal_interface_combinations", // WIFI_HAL_INTERFACE_COMBINATIONS @@ -53,6 +54,9 @@ wifi_hal_cc_defaults { avoid_iface_reset_mac_change: { cppflags: ["-DWIFI_AVOID_IFACE_RESET_MAC_CHANGE"], }, + wifi_skip_state_toggle_off_on_for_nan: { + cppflags: ["-DWIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN"], + }, hal_interface_combinations: { cppflags: ["-DWIFI_HAL_INTERFACE_COMBINATIONS=%s"], }, diff --git a/wifi/aidl/default/wifi_nan_iface.cpp b/wifi/aidl/default/wifi_nan_iface.cpp index 8e3a191b7a..cefe7f7695 100644 --- a/wifi/aidl/default/wifi_nan_iface.cpp +++ b/wifi/aidl/default/wifi_nan_iface.cpp @@ -623,6 +623,7 @@ void WifiNanIface::registerCallbackHandlers() { // Register for iface state toggle events. iface_util::IfaceEventHandlers event_handlers = {}; +#ifndef WIFI_SKIP_STATE_TOGGLE_OFF_ON_FOR_NAN event_handlers.on_state_toggle_off_on = [weak_ptr_this](const std::string& /* iface_name */) { const auto shared_ptr_this = weak_ptr_this.lock(); if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) { @@ -637,6 +638,7 @@ void WifiNanIface::registerCallbackHandlers() { } } }; +#endif iface_util_.lock()->registerIfaceEventHandlers(ifname_, event_handlers); }