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

Commit d87a0ee2 authored by Jimmy Chen's avatar Jimmy Chen
Browse files

p2p: add HAL method to enable P2P random MAC address feature

There are compatibility issue with driver for P2P random MAC.
The framework needs to check driver capability first before enabling
P2P random MAC address feature.

Bug: 118904478
Test: vts - atest VtsHalWifiSupplicantP2pV1_2TargetTest
Test: manual test
      * Enter WiFI Direct Page
      * check the feature is enabled in logcat
        * WifiP2pService: Supported feature: P2P MAC randomization
      * check p2p0 MAC address is randomized.

Change-Id: I28e226e7d51e3d5e3e6013d3772e643c1df1ab54
parent ec988f4b
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -31,7 +31,12 @@ interface IWifiChip extends @1.2::IWifiChip {
        /**
         * Set Latency Mode.
         */
         SET_LATENCY_MODE = 1 << 12
        SET_LATENCY_MODE = 1 << 12,

        /**
         * Support P2P MAC randomization
         */
        P2P_RAND_MAC = 1 << 13
    };

    /**
+10 −4
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ V1_3::IWifiChip::ChipCapabilityMask convertLegacyFeatureToHidlChipCapability(
            return HidlChipCaps::D2AP_RTT;
        case WIFI_FEATURE_SET_LATENCY_MODE:
            return HidlChipCaps::SET_LATENCY_MODE;
        case WIFI_FEATURE_P2P_RAND_MAC:
            return HidlChipCaps::P2P_RAND_MAC;
    };
    CHECK(false) << "Unknown legacy feature: " << feature;
    return {};
@@ -141,14 +143,18 @@ bool convertLegacyFeaturesToHidlChipCapabilities(
                convertLegacyLoggerFeatureToHidlChipCapability(feature);
        }
    }
    for (const auto feature :
         {WIFI_FEATURE_SET_TX_POWER_LIMIT, WIFI_FEATURE_USE_BODY_HEAD_SAR,
          WIFI_FEATURE_D2D_RTT, WIFI_FEATURE_D2AP_RTT,
          WIFI_FEATURE_SET_LATENCY_MODE}) {
    std::vector<uint32_t> features = {WIFI_FEATURE_SET_TX_POWER_LIMIT,
                                      WIFI_FEATURE_USE_BODY_HEAD_SAR,
                                      WIFI_FEATURE_D2D_RTT,
                                      WIFI_FEATURE_D2AP_RTT,
                                      WIFI_FEATURE_SET_LATENCY_MODE,
                                      WIFI_FEATURE_P2P_RAND_MAC};
    for (const auto feature : features) {
        if (feature & legacy_feature_set) {
            *hidl_caps |= convertLegacyFeatureToHidlChipCapability(feature);
        }
    }

    // There are no flags for these 3 in the legacy feature set. Adding them to
    // the set because all the current devices support it.
    *hidl_caps |= HidlChipCaps::DEBUG_RING_BUFFER_VENDOR_DATA;
+12 −0
Original line number Diff line number Diff line
@@ -68,4 +68,16 @@ interface ISupplicantP2pIface extends @1.0::ISupplicantP2pIface {
    addGroup_1_2(Ssid ssid, string pskPassphrase, bool persistent,
                 uint32_t freq, MacAddress peerAddress, bool joinExistingGroup)
        generates (SupplicantStatus status);

    /**
     * Set MAC randomization enabled/disabled.
     *
     * @param enable true to enable, false to disable.
     * @return status Status of the operation.
     *         Possible status codes:
     *         |SupplicantStatusCode.SUCCESS|,
     *         |SupplicantStatusCode.FAILURE_UNKNOWN|,
     *         |SupplicantStatusCode.FAILURE_IFACE_INVALID|
     */
    setMacRandomization(bool enable) generates (SupplicantStatus status);
};
+23 −0
Original line number Diff line number Diff line
@@ -126,3 +126,26 @@ TEST_F(SupplicantP2pIfaceHidlTest, AddGroup_1_2_FailureInvalidFrequency) {
            EXPECT_EQ(SupplicantStatusCode::FAILURE_UNKNOWN, status.code);
        });
}

/*
 * Verify that setMacRandomization successes.
 */
TEST_F(SupplicantP2pIfaceHidlTest, EnableMacRandomization) {
    p2p_iface_->setMacRandomization(true, [](const SupplicantStatus& status) {
        EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
    });

    // enable twice
    p2p_iface_->setMacRandomization(true, [](const SupplicantStatus& status) {
        EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
    });

    p2p_iface_->setMacRandomization(false, [](const SupplicantStatus& status) {
        EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
    });

    // disable twice
    p2p_iface_->setMacRandomization(false, [](const SupplicantStatus& status) {
        EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
    });
}