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
This commit is contained in:
Ye Jiao
2023-03-13 10:58:08 +08:00
committed by Sunil Ravi
parent 2da977681b
commit 2dc47ca925
4 changed files with 12 additions and 0 deletions

View File

@@ -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"],
},

View File

@@ -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);
}

View File

@@ -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"],
},

View File

@@ -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);
}