Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dc47ca9 authored by Ye Jiao's avatar Ye Jiao Committed by Sunil Ravi
Browse files

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
parent 2da97768
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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"],
        },
+2 −0
Original line number Diff line number Diff line
@@ -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);
}

+4 −0
Original line number Diff line number Diff line
@@ -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"],
        },
+2 −0
Original line number Diff line number Diff line
@@ -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);
}